diff --git a/app/app.pro b/app/app.pro index 3fbf927..c860478 100644 --- a/app/app.pro +++ b/app/app.pro @@ -93,6 +93,7 @@ INCLUDEPATH += \ $$PWD/../libs/ddsfile \ $$PWD/../libs/ipakfile \ $$PWD/../libs/iwifile \ + $$PWD/../libs/assets \ $$PWD/../libs/zonefile DEPENDPATH += \ @@ -106,6 +107,7 @@ DEPENDPATH += \ $$PWD/../libs/ddsfile \ $$PWD/../libs/ipakfile \ $$PWD/../libs/iwifile \ + $$PWD/../libs/assets \ $$PWD/../libs/zonefile # Copy DLLs to Debug folder diff --git a/app/fastfileviewer.cpp b/app/fastfileviewer.cpp index 62e7044..8e311b6 100644 --- a/app/fastfileviewer.cpp +++ b/app/fastfileviewer.cpp @@ -1,5 +1,4 @@ #include "fastfileviewer.h" -#include "asset_structs.h" #include "ui_fastfileviewer.h" FastFileViewer::FastFileViewer(QWidget *parent) diff --git a/app/fastfileviewer.h b/app/fastfileviewer.h index 3fc36c1..5ffe2e0 100644 --- a/app/fastfileviewer.h +++ b/app/fastfileviewer.h @@ -1,7 +1,6 @@ #ifndef FASTFILEVIEWER_H #define FASTFILEVIEWER_H -#include "asset_structs.h" #include "fastfile.h" #include diff --git a/app/imagewidget.cpp b/app/imagewidget.cpp index 04af5c1..76d2e89 100644 --- a/app/imagewidget.cpp +++ b/app/imagewidget.cpp @@ -13,16 +13,16 @@ ImageWidget::~ImageWidget() delete ui; } -void ImageWidget::SetImage(std::shared_ptr aImage) +void ImageWidget::SetImage(std::shared_ptr aImage) { mImage = aImage; - ui->lineEdit_Name->setText(aImage->name); - ui->lineEdit_Role->setText(aImage->materialName); - ui->comboBox_Compression->setCurrentIndex(aImage->compression); + //ui->lineEdit_Name->setText(aImage->name); + //ui->lineEdit_Role->setText(aImage->materialName); + //ui->comboBox_Compression->setCurrentIndex(aImage->compression); } -std::shared_ptr ImageWidget::GetImage() +std::shared_ptr ImageWidget::GetImage() { return mImage; } diff --git a/app/imagewidget.h b/app/imagewidget.h index 4de5a27..1db3547 100644 --- a/app/imagewidget.h +++ b/app/imagewidget.h @@ -4,7 +4,6 @@ #include "enums.h" #include "dds_structs.h" #include "d3dbsp_structs.h" -#include "asset_structs.h" #include "ipak_structs.h" #include @@ -21,11 +20,11 @@ public: explicit ImageWidget(QWidget *parent = nullptr); ~ImageWidget(); - void SetImage(std::shared_ptr aImage); - std::shared_ptr GetImage(); + void SetImage(std::shared_ptr aImage); + std::shared_ptr GetImage(); private: - std::shared_ptr mImage; + std::shared_ptr mImage; Ui::ImageWidget *ui; }; diff --git a/app/localstringviewer.cpp b/app/localstringviewer.cpp index 891b1e4..9ea075e 100644 --- a/app/localstringviewer.cpp +++ b/app/localstringviewer.cpp @@ -37,26 +37,22 @@ void LocalStringViewer::SetFileNotes(const QString aFileNotes) { ui->plainTextEdit_FileNotes->setPlainText(mFileNotes); } -void LocalStringViewer::AddLocalString(LocalString aLocalString) { - mLocalStrings.append(aLocalString); - - ui->tableWidget_Strings->setRowCount(mLocalStrings.size()); - - ui->groupBox_LocalStrViewer->setTitle(QString("Entries (%1)").arg(mLocalStrings.size())); - - QTableWidgetItem *aliasItem = new QTableWidgetItem(aLocalString.alias); - QTableWidgetItem *stringItem = new QTableWidgetItem(aLocalString.string); - - ui->tableWidget_Strings->setItem(mLocalStrings.size() - 1, 0, aliasItem); - ui->tableWidget_Strings->setItem(mLocalStrings.size() - 1, 1, stringItem); -} +// void LocalStringViewer::AddLocalString(LocalizeEntry aLocalString) { + // mLocalStrings.append(aLocalString); + // ui->tableWidget_Strings->setRowCount(mLocalStrings.size()); + // ui->groupBox_LocalStrViewer->setTitle(QString("Entries (%1)").arg(mLocalStrings.size())); + // QTableWidgetItem *aliasItem = new QTableWidgetItem(aLocalString.alias); + // QTableWidgetItem *stringItem = new QTableWidgetItem(aLocalString.string); + // ui->tableWidget_Strings->setItem(mLocalStrings.size() - 1, 0, aliasItem); + // ui->tableWidget_Strings->setItem(mLocalStrings.size() - 1, 1, stringItem); +// } void LocalStringViewer::SetZoneFile(std::shared_ptr aZoneFile) { - mLocalStrings.clear(); - ui->tableWidget_Strings->clear(); + // mLocalStrings.clear(); + // ui->tableWidget_Strings->clear(); - ui->label_Title->setText(aZoneFile->GetStem().section('.', 0, 0) + ".str"); - for (const LocalString &localStr : aZoneFile->GetAssetMap().localStrings) { - AddLocalString(localStr); - } + // ui->label_Title->setText(aZoneFile->GetStem().section('.', 0, 0) + ".str"); + // for (const LocalString &localStr : aZoneFile->GetAssetMap().localStrings) { + // AddLocalString(localStr); + // } } diff --git a/app/localstringviewer.h b/app/localstringviewer.h index b2c8566..a75994a 100644 --- a/app/localstringviewer.h +++ b/app/localstringviewer.h @@ -1,7 +1,6 @@ #ifndef LOCALSTRINGVIEWER_H #define LOCALSTRINGVIEWER_H -#include "asset_structs.h" #include "zonefile.h" #include @@ -20,7 +19,7 @@ public: void SetVersion(quint32 aVersion); void SetConfigPath(const QString aConfigPath); void SetFileNotes(const QString aFileNotes); - void AddLocalString(LocalString aLocalString); + //void AddLocalString(LocalString aLocalString); void SetZoneFile(std::shared_ptr aZoneFile); private: @@ -28,7 +27,7 @@ private: quint32 mVersion; QString mConfigPath; QString mFileNotes; - QVector mLocalStrings; + //QVector mLocalStrings; }; #endif // LOCALSTRINGVIEWER_H diff --git a/app/mainwindow.cpp b/app/mainwindow.cpp index 07605bc..f695b58 100644 --- a/app/mainwindow.cpp +++ b/app/mainwindow.cpp @@ -1,4 +1,6 @@ #include "mainwindow.h" +#include "ui_mainwindow.h" + #include "aboutdialog.h" #include "fastfile.h" #include "highlighter_gsc.h" @@ -7,12 +9,12 @@ #include "highlighter_rumble.h" #include "materialviewer.h" #include "preferenceeditor.h" +#include "reportissuedialog.h" #include "rumblefileviewer.h" #include "rumblegraphviewer.h" #include "soundviewer.h" #include "stringtableviewer.h" #include "techsetviewer.h" -#include "ui_mainwindow.h" #include "fastfile_factory.h" #include "iwifile.h" #include "ddsfile.h" @@ -23,7 +25,6 @@ #include "iwiviewer.h" #include "localstringviewer.h" #include "imagewidget.h" -#include "xtreewidget.h" #include "zonefileviewer.h" #include "techsetviewer.h" #include "logmanager.h" @@ -39,7 +40,7 @@ MainWindow::MainWindow(QWidget *parent) mTypeMap = QMap(); mTypeOrder = QStringList(); mRawFileMap = QMap(); - mImageMap = QMap(); + //mImageMap = QMap(); mTreeMap = QMap(); mStrTableMap = QMap>>(); mBSPVersion = 0; @@ -49,13 +50,23 @@ MainWindow::MainWindow(QWidget *parent) mTreeWidget = new XTreeWidget(this); mLogWidget = new QPlainTextEdit(this); - //ModelViewer *mModelViewer = new ModelViewer(container); - //mModelViewer->setAcceptDrops(false); - mProgressBar = new QProgressBar(this); mProgressBar->setMaximum(100); // Default max value mProgressBar->setVisible(false); // Initially hidden + connect(ui->actionRun_Tests, &QAction::triggered, this, [](bool checked) { + Q_UNUSED(checked); + }); + + connect(ui->actionReport_Issue, &QAction::triggered, this, [this](bool checked) { + Q_UNUSED(checked); + + ReportIssueDialog issueDialog("https://git.redline.llc", "njohnson", "XPlor", "4738c4d2efd123efac1506c68c59b285c646df9f", this); + if (issueDialog.exec() == QDialog::Accepted) { + + } + }); + connect(&StatusBarManager::instance(), &StatusBarManager::statusUpdated, this, &MainWindow::HandleStatusUpdate); @@ -157,13 +168,13 @@ MainWindow::MainWindow(QWidget *parent) scriptEditor->setProperty("PARENT_NAME", QVariant::fromValue(aParentName)); scriptEditor->setFont(QFont("Consolas")); - if (rawFile->contents.isEmpty()) { - scriptEditor->setPlainText("EMPTY"); - } else { - scriptEditor->setPlainText(rawFile->contents); - } + // if (rawFile->contents.isEmpty()) { + // scriptEditor->setPlainText("EMPTY"); + // } else { + // scriptEditor->setPlainText(rawFile->contents); + // } - QString fileStem = rawFile->path.split('/').last(); + QString fileStem;// = rawFile->path.split('/').last(); for (int i = 0; i < ui->tabWidget->count(); i++) { if (ui->tabWidget->tabText(i) == fileStem) { delete scriptEditor; @@ -175,7 +186,7 @@ MainWindow::MainWindow(QWidget *parent) QFontMetrics metrics(scriptEditor->font()); scriptEditor->setTabStopDistance(tabStopSpaces * metrics.horizontalAdvance(' ')); - QSyntaxHighlighter *highlighter; + QSyntaxHighlighter *highlighter = nullptr; if (fileStem.contains(".gsc")) { highlighter = new Highlighter_GSC(scriptEditor->document()); } else if (fileStem.contains(".cfg")) { @@ -191,12 +202,12 @@ MainWindow::MainWindow(QWidget *parent) rawTabWidget->addTab(scriptEditor, "Text Editor"); ui->tabWidget->addTab(rawTabWidget, fileStem); - ui->tabWidget->setTabIcon(ui->tabWidget->count() - 1, ZoneFile::AssetTypeToIcon(ASSET_RUMBLE)); + ui->tabWidget->setTabIcon(ui->tabWidget->count() - 1, Utils::CreateAssetIcon(Utils::ASSET_RUMBLE)); ui->tabWidget->setCurrentIndex(ui->tabWidget->count() - 1); return; } else if (fileStem.contains(".shock")) { highlighter = new Highlighter_Shock(scriptEditor->document()); - } else if (rawFile->contents.left(6) == "RUMBLE") { + } /*else if (rawFile->contents.left(6) == "RUMBLE") { RumbleFileViewer *rmbFileViewer = new RumbleFileViewer(this); rmbFileViewer->setProperty("PARENT_NAME", QVariant::fromValue(aParentName)); rmbFileViewer->SetRumbleFile(rawFile); @@ -205,38 +216,40 @@ MainWindow::MainWindow(QWidget *parent) rawTabWidget->addTab(scriptEditor, "Text Editor"); ui->tabWidget->addTab(rawTabWidget, fileStem); - ui->tabWidget->setTabIcon(ui->tabWidget->count() - 1, ZoneFile::AssetTypeToIcon(ASSET_RUMBLE)); + ui->tabWidget->setTabIcon(ui->tabWidget->count() - 1, Utils::CreateAssetIcon(Utils::ASSET_RUMBLE)); ui->tabWidget->setCurrentIndex(ui->tabWidget->count() - 1); return; + }*/ else { + delete highlighter; } ui->tabWidget->addTab(scriptEditor, fileStem); - ui->tabWidget->setTabIcon(ui->tabWidget->count() - 1, ZoneFile::AssetTypeToIcon(ASSET_RAW_FILE)); + ui->tabWidget->setTabIcon(ui->tabWidget->count() - 1, Utils::CreateAssetIcon(Utils::ASSET_RAWFILE)); ui->tabWidget->setCurrentIndex(ui->tabWidget->count() - 1); }); - connect(mTreeWidget, &XTreeWidget::ImageSelected, this, [this](std::shared_ptr image, const QString aParentName) { - ImageWidget *mImageWidget = new ImageWidget(this); - mImageWidget->setAcceptDrops(false); - mImageWidget->SetImage(image); - mImageWidget->setProperty("PARENT_NAME", QVariant::fromValue(aParentName)); + // connect(mTreeWidget, &XTreeWidget::ImageSelected, this, [this](std::shared_ptr image, const QString aParentName) { + // ImageWidget *mImageWidget = new ImageWidget(this); + // mImageWidget->setAcceptDrops(false); + // mImageWidget->SetImage(image); + // mImageWidget->setProperty("PARENT_NAME", QVariant::fromValue(aParentName)); - QString fileStem = image->materialName; - for (int i = 0; i < ui->tabWidget->count(); i++) { - if (ui->tabWidget->tabText(i) == fileStem) { - delete mImageWidget; - return; - } - } + // QString fileStem = image->materialName; + // for (int i = 0; i < ui->tabWidget->count(); i++) { + // if (ui->tabWidget->tabText(i) == fileStem) { + // delete mImageWidget; + // return; + // } + // } - ui->tabWidget->addTab(mImageWidget, fileStem); - ui->tabWidget->setTabIcon(ui->tabWidget->count() - 1, ZoneFile::AssetTypeToIcon(ASSET_IMAGE)); - ui->tabWidget->setCurrentIndex(ui->tabWidget->count() - 1); - }); + // ui->tabWidget->addTab(mImageWidget, fileStem); + // ui->tabWidget->setTabIcon(ui->tabWidget->count() - 1, Utils::CreateAssetIcon(Utils::ASSET_IMAGE)); + // ui->tabWidget->setCurrentIndex(ui->tabWidget->count() - 1); + // }); - connect(mTreeWidget, &XTreeWidget::MenuSelected, this, [](std::shared_ptr menu, const QString aParentName) { - Q_UNUSED(menu); - }); + // connect(mTreeWidget, &XTreeWidget::MenuSelected, this, [](std::shared_ptr menu, const QString aParentName) { + // Q_UNUSED(menu); + // }); connect(mTreeWidget, &XTreeWidget::MaterialSelected, this, [this](std::shared_ptr material, const QString aParentName) { MaterialViewer *matViewer = new MaterialViewer(this); @@ -244,16 +257,16 @@ MainWindow::MainWindow(QWidget *parent) matViewer->SetMaterial(material); matViewer->setProperty("PARENT_NAME", QVariant::fromValue(aParentName)); - QString fileStem = material->name; - for (int i = 0; i < ui->tabWidget->count(); i++) { - if (ui->tabWidget->tabText(i) == fileStem) { - delete matViewer; - return; - } - } + // QString fileStem = material->name; + // for (int i = 0; i < ui->tabWidget->count(); i++) { + // if (ui->tabWidget->tabText(i) == fileStem) { + // delete matViewer; + // return; + // } + // } - ui->tabWidget->addTab(matViewer, fileStem); - ui->tabWidget->setTabIcon(ui->tabWidget->count() - 1, ZoneFile::AssetTypeToIcon(ASSET_MATERIAL)); + //ui->tabWidget->addTab(matViewer, fileStem); + ui->tabWidget->setTabIcon(ui->tabWidget->count() - 1, Utils::CreateAssetIcon(Utils::ASSET_MATERIAL)); ui->tabWidget->setCurrentIndex(ui->tabWidget->count() - 1); }); @@ -272,7 +285,7 @@ MainWindow::MainWindow(QWidget *parent) } ui->tabWidget->addTab(ddsViewer, fileStem); - ui->tabWidget->setTabIcon(ui->tabWidget->count() - 1, ZoneFile::AssetTypeToIcon(ASSET_IMAGE)); + ui->tabWidget->setTabIcon(ui->tabWidget->count() - 1, Utils::CreateAssetIcon(Utils::ASSET_IMAGE)); ui->tabWidget->setCurrentIndex(ui->tabWidget->count() - 1); }); @@ -291,7 +304,7 @@ MainWindow::MainWindow(QWidget *parent) } ui->tabWidget->addTab(iwiViewer, fileStem); - ui->tabWidget->setTabIcon(ui->tabWidget->count() - 1, ZoneFile::AssetTypeToIcon(ASSET_IMAGE)); + ui->tabWidget->setTabIcon(ui->tabWidget->count() - 1, Utils::CreateAssetIcon(Utils::ASSET_IMAGE)); ui->tabWidget->setCurrentIndex(ui->tabWidget->count() - 1); }); @@ -310,7 +323,7 @@ MainWindow::MainWindow(QWidget *parent) } ui->tabWidget->addTab(fastFileViewer, fileStem); - ui->tabWidget->setTabIcon(ui->tabWidget->count() - 1, ZoneFile::AssetTypeToIcon(ASSET_FAST_FILE)); + ui->tabWidget->setTabIcon(ui->tabWidget->count() - 1, Utils::CreateAssetIcon(Utils::ASSET_FAST_FILE)); ui->tabWidget->setCurrentIndex(ui->tabWidget->count() - 1); }); @@ -341,7 +354,7 @@ MainWindow::MainWindow(QWidget *parent) scrollArea->setWidget(containerWidget); ui->tabWidget->addTab(scrollArea, fileStem); - ui->tabWidget->setTabIcon(ui->tabWidget->count() - 1, ZoneFile::AssetTypeToIcon(ASSET_ZONE_FILE)); + ui->tabWidget->setTabIcon(ui->tabWidget->count() - 1, Utils::CreateAssetIcon(Utils::ASSET_ZONE_FILE)); ui->tabWidget->setCurrentIndex(ui->tabWidget->count() - 1); }); @@ -360,11 +373,11 @@ MainWindow::MainWindow(QWidget *parent) } ui->tabWidget->addTab(localStrViewer, fileStem); - ui->tabWidget->setTabIcon(ui->tabWidget->count() - 1, ZoneFile::AssetTypeToIcon(ASSET_LOCAL_STRING)); + ui->tabWidget->setTabIcon(ui->tabWidget->count() - 1, Utils::CreateAssetIcon(Utils::ASSET_LOCALIZE_ENTRY)); ui->tabWidget->setCurrentIndex(ui->tabWidget->count() - 1); }); - connect(mTreeWidget, &XTreeWidget::TechSetSelected, this, [this](std::shared_ptr aTechSet, const QString aParentName) { + connect(mTreeWidget, &XTreeWidget::TechSetSelected, this, [this](std::shared_ptr aTechSet, const QString aParentName) { TechSetViewer *techSetViewer = new TechSetViewer(this); techSetViewer->setAcceptDrops(false); techSetViewer->SetTechSet(aTechSet); @@ -379,7 +392,7 @@ MainWindow::MainWindow(QWidget *parent) } ui->tabWidget->addTab(techSetViewer, aTechSet->name); - ui->tabWidget->setTabIcon(ui->tabWidget->count() - 1, ZoneFile::AssetTypeToIcon(ASSET_TECH_SET)); + ui->tabWidget->setTabIcon(ui->tabWidget->count() - 1, Utils::CreateAssetIcon(Utils::ASSET_TECHNIQUE_SET)); ui->tabWidget->setCurrentIndex(ui->tabWidget->count() - 1); }); @@ -398,28 +411,28 @@ MainWindow::MainWindow(QWidget *parent) } ui->tabWidget->addTab(strTableViewer, fileStem); - ui->tabWidget->setTabIcon(ui->tabWidget->count() - 1, ZoneFile::AssetTypeToIcon(ASSET_STRING_TABLE)); + ui->tabWidget->setTabIcon(ui->tabWidget->count() - 1, Utils::CreateAssetIcon(Utils::ASSET_STRINGTABLE)); ui->tabWidget->setCurrentIndex(ui->tabWidget->count() - 1); }); - connect(mTreeWidget, &XTreeWidget::SoundSelected, this, [this](std::shared_ptr aSound, const QString aParentName) { - SoundViewer *soundViewer = new SoundViewer(this); - soundViewer->setAcceptDrops(false); - soundViewer->SetSound(aSound); - soundViewer->setProperty("PARENT_NAME", QVariant::fromValue(aParentName)); + // connect(mTreeWidget, &XTreeWidget::SoundSelected, this, [this](std::shared_ptr aSound, const QString aParentName) { + // SoundViewer *soundViewer = new SoundViewer(this); + // soundViewer->setAcceptDrops(false); + // soundViewer->SetSound(aSound); + // soundViewer->setProperty("PARENT_NAME", QVariant::fromValue(aParentName)); - QString fileStem = aSound->path.split('/').last(); - for (int i = 0; i < ui->tabWidget->count(); i++) { - if (ui->tabWidget->tabText(i) == fileStem) { - delete soundViewer; - return; - } - } + // QString fileStem = aSound->path.split('/').last(); + // for (int i = 0; i < ui->tabWidget->count(); i++) { + // if (ui->tabWidget->tabText(i) == fileStem) { + // delete soundViewer; + // return; + // } + // } - ui->tabWidget->addTab(soundViewer, fileStem); - ui->tabWidget->setTabIcon(ui->tabWidget->count() - 1, ZoneFile::AssetTypeToIcon(ASSET_SOUND)); - ui->tabWidget->setCurrentIndex(ui->tabWidget->count() - 1); - }); + // ui->tabWidget->addTab(soundViewer, fileStem); + // ui->tabWidget->setTabIcon(ui->tabWidget->count() - 1, Utils::CreateAssetIcon(Utils::ASSET_SOUND)); + // ui->tabWidget->setCurrentIndex(ui->tabWidget->count() - 1); + // }); connect(mTreeWidget, &XTreeWidget::ItemSelected, this, [this](const QString itemText) { for (int i = 0; i < ui->tabWidget->count(); i++) { @@ -535,8 +548,17 @@ bool MainWindow::OpenFastFile(const QString aFastFilePath) { and opens the selected file. */ bool MainWindow::OpenFastFile() { - const QString fastFileName = Utils::GetOpenFastFileName(); - if (!OpenFastFile(fastFileName)) { + // Open file dialog to steam apps + const QString steamPath = "C:/Program Files (x86)/Steam/steamapps/common/Call of Duty World at War/zone/english/"; + const QString fastFilePath = QFileDialog::getOpenFileName(this, "Open Fast File", steamPath, "Fast File (*.ff);;All Files (*.*)"); + if (fastFilePath.isNull()) { + // User pressed cancel + return false; + } else if (!QFile::exists(fastFilePath)) { + QMessageBox::warning(this, "Warning!", QString("%1 does not exist!.").arg(fastFilePath)); + return false; + } + if (!OpenFastFile(fastFilePath)) { qDebug() << "Failed to open Fast file!"; return false; } @@ -564,8 +586,14 @@ bool MainWindow::OpenZoneFile(const QString aZoneFilePath, bool fromFF) { } bool MainWindow::OpenZoneFile() { - const QString zoneFileName = Utils::GetOpenZoneFileName(); - if (!OpenZoneFile(zoneFileName)) { + // Open file dialog to steam apps + const QString steamPath = "C:/Program Files (x86)/Steam/steamapps/common/Call of Duty World at War/zone/english/"; + const QString zoneFilePath = QFileDialog::getOpenFileName(this, "Open Zone File", steamPath, "Zone File (*.zone);;All Files (*.*)"); + if (zoneFilePath.isNull()) { + // User pressed cancel + return false; + } else if (!QFile::exists(zoneFilePath)) { + QMessageBox::warning(this, "Warning!", QString("%1 does not exist!.").arg(zoneFilePath)); qDebug() << "Failed to open Zone file!"; return false; } diff --git a/app/mainwindow.h b/app/mainwindow.h index daa90dc..3216f30 100644 --- a/app/mainwindow.h +++ b/app/mainwindow.h @@ -2,7 +2,6 @@ #define MAINWINDOW_H #include "d3dbsp_structs.h" -#include "asset_structs.h" #include "xtreewidget.h" #include @@ -64,7 +63,7 @@ private: quint32 mTagCount; quint32 mRecordCount; QMap mRawFileMap; - QMap mImageMap; + //QMap mImageMap; QMap mTreeMap; QMap>> mStrTableMap; XTreeWidget *mTreeWidget; diff --git a/app/mainwindow.ui b/app/mainwindow.ui index 1e1b164..53f58c8 100644 --- a/app/mainwindow.ui +++ b/app/mainwindow.ui @@ -50,7 +50,7 @@ 21 - + File @@ -117,9 +117,17 @@ + - + + + Tools + + + + + @@ -353,6 +361,16 @@ Preferences... + + + Report Issue + + + + + Run Tests + + diff --git a/app/materialviewer.cpp b/app/materialviewer.cpp index 08064e6..f475cd5 100644 --- a/app/materialviewer.cpp +++ b/app/materialviewer.cpp @@ -16,20 +16,20 @@ QString ToHexStr(quint32 in) { } void MaterialViewer::SetMaterial(std::shared_ptr aMaterial) { - ui->lineEdit_NamePtr->setText(ToHexStr(aMaterial->namePtr)); - ui->lineEdit_Name->setText(aMaterial->name); - ui->lineEdit_RefPtr->setText(ToHexStr(aMaterial->refNamePtr)); - ui->lineEdit_RefName->setText(aMaterial->refName); - QString unknownStr = ""; - foreach (quint32 unknownPtr, aMaterial->pointers) { - unknownStr += ToHexStr(unknownPtr) + "\n"; - } - ui->lineEdit_Unknowns->setText(unknownStr); - ui->lineEdit_StateA->setText(ToHexStr(aMaterial->stateBits[0])); - ui->lineEdit_StateA->setText(ToHexStr(aMaterial->stateBits[1])); - ui->spinBox_TextureCount->setValue(aMaterial->textureCount); - ui->spinBox_ConstCount->setValue(aMaterial->constCount); - ui->lineEdit_TechSetPtr->setText(ToHexStr(aMaterial->techSetPtr)); - ui->lineEdit_TexturePtr->setText(ToHexStr(aMaterial->texturePtr)); - ui->lineEdit_ConstantPtr->setText(ToHexStr(aMaterial->constPtr)); + // ui->lineEdit_NamePtr->setText(ToHexStr(aMaterial->namePtr)); + // ui->lineEdit_Name->setText(aMaterial->name); + // ui->lineEdit_RefPtr->setText(ToHexStr(aMaterial->refNamePtr)); + // ui->lineEdit_RefName->setText(aMaterial->refName); + // QString unknownStr = ""; + // foreach (quint32 unknownPtr, aMaterial->pointers) { + // unknownStr += ToHexStr(unknownPtr) + "\n"; + // } + // ui->lineEdit_Unknowns->setText(unknownStr); + // ui->lineEdit_StateA->setText(ToHexStr(aMaterial->stateBits[0])); + // ui->lineEdit_StateA->setText(ToHexStr(aMaterial->stateBits[1])); + // ui->spinBox_TextureCount->setValue(aMaterial->textureCount); + // ui->spinBox_ConstCount->setValue(aMaterial->constCount); + // ui->lineEdit_TechSetPtr->setText(ToHexStr(aMaterial->techSetPtr)); + // ui->lineEdit_TexturePtr->setText(ToHexStr(aMaterial->texturePtr)); + // ui->lineEdit_ConstantPtr->setText(ToHexStr(aMaterial->constPtr)); } diff --git a/app/materialviewer.h b/app/materialviewer.h index 7b24deb..9260f23 100644 --- a/app/materialviewer.h +++ b/app/materialviewer.h @@ -1,7 +1,7 @@ #ifndef MATERIALVIEWER_H #define MATERIALVIEWER_H -#include "asset_structs.h" +#include "material.h" #include #include diff --git a/app/rumblefileviewer.cpp b/app/rumblefileviewer.cpp index a6483f2..7d60566 100644 --- a/app/rumblefileviewer.cpp +++ b/app/rumblefileviewer.cpp @@ -23,36 +23,36 @@ void RumbleFileViewer::SetRumbleFile(std::shared_ptr aRumbleFile) { ui->tableWidget_Properties->clear(); - const QString magic = aRumbleFile->contents.left(6); - if (magic != "RUMBLE") { - qDebug() << "Rumble file has invalid magic: " << magic; - return; - } + // const QString magic = aRumbleFile->contents.left(6); + // if (magic != "RUMBLE") { + // qDebug() << "Rumble file has invalid magic: " << magic; + // return; + // } - int firstIndex = 0; - int secondIndex = 0; - int thirdIndex = 0; + // int firstIndex = 0; + // int secondIndex = 0; + // int thirdIndex = 0; - int startIndex = 0; - for (int i = 0; i < aRumbleFile->contents.count("\\") / 2; i++) { - ui->tableWidget_Properties->setRowCount(i + 1); - ui->spinBox_Entries->setValue(i + 1); + // int startIndex = 0; + // for (int i = 0; i < aRumbleFile->contents.count("\\") / 2; i++) { + // ui->tableWidget_Properties->setRowCount(i + 1); + // ui->spinBox_Entries->setValue(i + 1); - firstIndex = aRumbleFile->contents.indexOf("\\", startIndex); - secondIndex = aRumbleFile->contents.indexOf("\\", firstIndex + 1); - thirdIndex = aRumbleFile->contents.indexOf("\\", secondIndex + 1); - if (thirdIndex == -1) { - thirdIndex = aRumbleFile->contents.size(); - } + // firstIndex = aRumbleFile->contents.indexOf("\\", startIndex); + // secondIndex = aRumbleFile->contents.indexOf("\\", firstIndex + 1); + // thirdIndex = aRumbleFile->contents.indexOf("\\", secondIndex + 1); + // if (thirdIndex == -1) { + // thirdIndex = aRumbleFile->contents.size(); + // } - const QString keyStr = aRumbleFile->contents.mid(firstIndex + 1, secondIndex - firstIndex - 1); - QTableWidgetItem *keyItem = new QTableWidgetItem(keyStr); - ui->tableWidget_Properties->setItem(i, 0, keyItem); + // const QString keyStr = aRumbleFile->contents.mid(firstIndex + 1, secondIndex - firstIndex - 1); + // QTableWidgetItem *keyItem = new QTableWidgetItem(keyStr); + // ui->tableWidget_Properties->setItem(i, 0, keyItem); - const QString valStr = aRumbleFile->contents.mid(secondIndex + 1, thirdIndex - secondIndex - 1); - QTableWidgetItem *valueItem = new QTableWidgetItem(valStr); - ui->tableWidget_Properties->setItem(i, 1, valueItem); + // const QString valStr = aRumbleFile->contents.mid(secondIndex + 1, thirdIndex - secondIndex - 1); + // QTableWidgetItem *valueItem = new QTableWidgetItem(valStr); + // ui->tableWidget_Properties->setItem(i, 1, valueItem); - startIndex = thirdIndex; - } + // startIndex = thirdIndex; + // } } diff --git a/app/rumblefileviewer.h b/app/rumblefileviewer.h index eb21e23..9d46b3b 100644 --- a/app/rumblefileviewer.h +++ b/app/rumblefileviewer.h @@ -1,8 +1,8 @@ #ifndef RUMBLEFILEVIEWER_H #define RUMBLEFILEVIEWER_H -#include "asset_structs.h" -#include "zonefile.h" +#include "rawfile.h" + #include namespace Ui { diff --git a/app/rumblegraphviewer.cpp b/app/rumblegraphviewer.cpp index ca3dc8e..e5908ed 100644 --- a/app/rumblegraphviewer.cpp +++ b/app/rumblegraphviewer.cpp @@ -22,7 +22,7 @@ RumbleGraphViewer::~RumbleGraphViewer() { void RumbleGraphViewer::SetRumbleGraphFile(const std::shared_ptr aRawFile) { mRumbleGraphFile = aRawFile; - QDataStream rawFileStream(mRumbleGraphFile->contents.toLatin1()); + QDataStream rawFileStream;//(mRumbleGraphFile->contents.toLatin1()); QByteArray magic(15, Qt::Uninitialized); rawFileStream.readRawData(magic.data(), 15); diff --git a/app/rumblegraphviewer.h b/app/rumblegraphviewer.h index 6f8e498..d5a624b 100644 --- a/app/rumblegraphviewer.h +++ b/app/rumblegraphviewer.h @@ -1,7 +1,6 @@ #ifndef RUMBLEGRAPHVIEWER_H #define RUMBLEGRAPHVIEWER_H -#include "asset_structs.h" #include "zonefile.h" #include diff --git a/app/soundviewer.cpp b/app/soundviewer.cpp index 9007e9f..3fc398d 100644 --- a/app/soundviewer.cpp +++ b/app/soundviewer.cpp @@ -61,17 +61,17 @@ SoundViewer::~SoundViewer() delete ui; } -void SoundViewer::SetSound(std::shared_ptr aSound) -{ - buffer->setData(aSound->data); - if (!buffer->open(QIODevice::ReadOnly)) { - qWarning() << "Failed to open QBuffer."; - return; - } +// void SoundViewer::SetSound(std::shared_ptr aSound) +// { +// buffer->setData(aSound->data); +// if (!buffer->open(QIODevice::ReadOnly)) { +// qWarning() << "Failed to open QBuffer."; +// return; +// } - ui->groupBox->setTitle(aSound->path); - player->setSourceDevice(buffer); -} +// ui->groupBox->setTitle(aSound->path); +// player->setSourceDevice(buffer); +// } void SoundViewer::SetOutput(QAudioOutput *aOutput) { if (!aOutput) { return; } diff --git a/app/soundviewer.h b/app/soundviewer.h index 825c28c..8d43d58 100644 --- a/app/soundviewer.h +++ b/app/soundviewer.h @@ -1,8 +1,6 @@ #ifndef SOUNDVIEWER_H #define SOUNDVIEWER_H -#include "asset_structs.h" - #include #include #include @@ -22,7 +20,7 @@ public: explicit SoundViewer(QWidget *parent = nullptr); ~SoundViewer(); - void SetSound(std::shared_ptr aSound); + //void SetSound(std::shared_ptr aSound); void SetOutput(QAudioOutput *aOutput); private: diff --git a/app/stringtableviewer.cpp b/app/stringtableviewer.cpp index b71b8e5..b3a4c5c 100644 --- a/app/stringtableviewer.cpp +++ b/app/stringtableviewer.cpp @@ -19,18 +19,18 @@ void StringTableViewer::SetStringTable(std::shared_ptr aStringTable ui->tableWidget_Strings->setRowCount(aStringTable->rowCount); ui->tableWidget_Strings->setColumnCount(aStringTable->columnCount); - int currentIndex = 0; - for (const QString &key : aStringTable->content.keys()) { - const QString value = aStringTable->content[key]; + // int currentIndex = 0; + // for (const QString &key : aStringTable->content.keys()) { + // const QString value = aStringTable->content[key]; - QTableWidgetItem *tableKeyItem = new QTableWidgetItem(); - tableKeyItem->setText(key); - ui->tableWidget_Strings->setItem(currentIndex, 0, tableKeyItem); + // QTableWidgetItem *tableKeyItem = new QTableWidgetItem(); + // tableKeyItem->setText(key); + // ui->tableWidget_Strings->setItem(currentIndex, 0, tableKeyItem); - QTableWidgetItem *tableValItem = new QTableWidgetItem(); - tableValItem->setText(value); - ui->tableWidget_Strings->setItem(currentIndex, 1, tableValItem); + // QTableWidgetItem *tableValItem = new QTableWidgetItem(); + // tableValItem->setText(value); + // ui->tableWidget_Strings->setItem(currentIndex, 1, tableValItem); - currentIndex++; - } + // currentIndex++; + // } } diff --git a/app/stringtableviewer.h b/app/stringtableviewer.h index 29dc08a..c7f00b6 100644 --- a/app/stringtableviewer.h +++ b/app/stringtableviewer.h @@ -1,7 +1,8 @@ #ifndef STRINGTABLEVIEWER_H #define STRINGTABLEVIEWER_H -#include "asset_structs.h" +#include "stringtable.h" + #include namespace Ui { diff --git a/app/techsetviewer.cpp b/app/techsetviewer.cpp index 81548b3..8985d6b 100644 --- a/app/techsetviewer.cpp +++ b/app/techsetviewer.cpp @@ -13,13 +13,13 @@ TechSetViewer::~TechSetViewer() delete ui; } -void TechSetViewer::SetTechSet(std::shared_ptr aTechSet) { - ui->listWidget_Ptrs->clear(); +void TechSetViewer::SetTechSet(std::shared_ptr aTechSet) { + //ui->listWidget_Ptrs->clear(); ui->label_Title->setText(aTechSet->name); - int ptrIndex = 1; - for (auto ptr : aTechSet->pointers) { - ui->listWidget_Ptrs->addItem(QString("Pointer %1: %2").arg(ptrIndex).arg(ptr)); - ptrIndex++; - } + // int ptrIndex = 1; + //for (auto ptr : aTechSet->pointers) { + // ui->listWidget_Ptrs->addItem(QString("Pointer %1: %2").arg(ptrIndex).arg(ptr)); + // ptrIndex++; + //} } diff --git a/app/techsetviewer.h b/app/techsetviewer.h index 20182cb..f02c0a6 100644 --- a/app/techsetviewer.h +++ b/app/techsetviewer.h @@ -1,7 +1,8 @@ #ifndef TECHSETVIEWER_H #define TECHSETVIEWER_H -#include "asset_structs.h" +#include "materialtechset.h" + #include namespace Ui { @@ -16,7 +17,7 @@ public: explicit TechSetViewer(QWidget *parent = nullptr); ~TechSetViewer(); - void SetTechSet(std::shared_ptr aTechSet); + void SetTechSet(std::shared_ptr aTechSet); private: Ui::TechSetViewer *ui; diff --git a/app/techsetviewer.ui b/app/techsetviewer.ui index fadd6d2..f8bb026 100644 --- a/app/techsetviewer.ui +++ b/app/techsetviewer.ui @@ -6,14 +6,14 @@ 0 0 - 961 - 756 + 880 + 559 Form - + @@ -29,47 +29,121 @@ - + - Unknown Pointers: + Set Parameters - + + + + + Name: + + + + + + + Technique set name + + + + + + + + + + + World Vertex Format: + + + + + + + + + + - - - Qt::Orientation::Horizontal + + + Current Technique - - - 40 - 20 - - - + + + + + + + Name: + + + + + + + Technique set name + + + + + + + + + + + Flags: + + + + + + + + + + + + + + Pass Count: + + + + + + + + + + + + + 0 + 0 + + + + Material Pass + + + + + - - - - Qt::Orientation::Vertical - - - - 20 - 363 - - - - diff --git a/app/xtreewidget.cpp b/app/xtreewidget.cpp index dc00cd9..9eb2158 100644 --- a/app/xtreewidget.cpp +++ b/app/xtreewidget.cpp @@ -90,13 +90,13 @@ void XTreeWidget::AddZoneFile(std::shared_ptr aZoneFile, XTreeWidgetIt } else { zoneItem = new XTreeWidgetItem(this); } - zoneItem->setIcon(0, ZoneFile::AssetTypeToIcon(ASSET_ZONE_FILE)); + zoneItem->setIcon(0, Utils::CreateAssetIcon(Utils::ASSET_ZONE_FILE)); zoneItem->setText(0, aZoneFile->GetBaseStem() + ".zone"); auto assetMap = aZoneFile->GetAssetMap(); - if (!assetMap.localStrings.isEmpty()) { - QIcon localStrIcon = ZoneFile::AssetTypeToIcon(ASSET_LOCAL_STRING); + if (!assetMap.localizeEntries.isEmpty()) { + QIcon localStrIcon = Utils::CreateAssetIcon(Utils::ASSET_LOCALIZE_ENTRY); XTreeWidgetItem *localStrRoot = new XTreeWidgetItem(zoneItem); localStrRoot->setText(0, "String Files"); @@ -109,14 +109,14 @@ void XTreeWidget::AddZoneFile(std::shared_ptr aZoneFile, XTreeWidgetIt } if (!assetMap.techSets.isEmpty()) { - QIcon techSetIcon = ZoneFile::AssetTypeToIcon(ASSET_TECH_SET); + QIcon techSetIcon = Utils::CreateAssetIcon(Utils::ASSET_TECHNIQUE_SET); XTreeWidgetItem *techSetRoot = new XTreeWidgetItem(zoneItem); techSetRoot->setText(0, "Tech Sets"); techSetRoot->setIcon(0, techSetIcon); techSetRoot->SetCategory(CATEGORY_TYPE); - for (TechSet techSet : assetMap.techSets) { + for (auto techSet : assetMap.techSets) { XTreeWidgetItem *techSetItem = new XTreeWidgetItem(techSetRoot); techSetItem->setText(0, techSet.name); techSetItem->setIcon(0, techSetIcon); @@ -124,122 +124,121 @@ void XTreeWidget::AddZoneFile(std::shared_ptr aZoneFile, XTreeWidgetIt } if (!assetMap.rawFiles.isEmpty()) { - QIcon rawFileIcon = ZoneFile::AssetTypeToIcon(ASSET_RAW_FILE); + QIcon rawFileIcon = Utils::CreateAssetIcon(Utils::ASSET_RAWFILE); XTreeWidgetItem *rawFileRoot = new XTreeWidgetItem(zoneItem); rawFileRoot->setText(0, "Raw Files"); rawFileRoot->setIcon(0, rawFileIcon); rawFileRoot->SetCategory(CATEGORY_TYPE); - for (RawFile rawFile : assetMap.rawFiles) { + for (auto rawFile : assetMap.rawFiles) { if (!rawFile.length) { continue; } XTreeWidgetItem *tempItem = rawFileRoot; - const QStringList pathParts = rawFile.path.split('/'); - for (const QString &pathPart : pathParts) { - bool childFound = false; - for (int i = 0; i < tempItem->childCount(); i++) { - QTreeWidgetItem *rawChildItem = tempItem->child(i); - XTreeWidgetItem *childItem = dynamic_cast(rawChildItem); - if (childItem->text(0) == pathPart) { - tempItem = childItem; + // const QStringList pathParts = rawFile->path.split('/'); + // for (const QString &pathPart : pathParts) { + // bool childFound = false; + // for (int i = 0; i < tempItem->childCount(); i++) { + // QTreeWidgetItem *rawChildItem = tempItem->child(i); + // XTreeWidgetItem *childItem = dynamic_cast(rawChildItem); + // if (childItem->text(0) == pathPart) { + // tempItem = childItem; - childFound = true; - break; - } - } + // childFound = true; + // break; + // } + // } - const QString rawFileStr = QString("%1 [%2-%3]").arg(pathPart).arg(rawFile.startPos).arg(rawFile.endPos); - //rawFileStr = pathPart; - if (pathPart == pathParts.last()) { - XTreeWidgetItem *rawFileItem = new XTreeWidgetItem(tempItem); - rawFileItem->setText(0, rawFileStr); + // const QString rawFileStr = pathPart;// = QString("%1 [%2-%3]").arg(pathPart).arg(rawFile.startPos).arg(rawFile.endPos); + // if (pathPart == pathParts.last()) { + // XTreeWidgetItem *rawFileItem = new XTreeWidgetItem(tempItem); + // rawFileItem->setText(0, rawFileStr); - tempItem = rawFileItem; - } else if (!childFound) { - tempItem = new XTreeWidgetItem(tempItem); - tempItem->setText(0, rawFileStr); - } + // tempItem = rawFileItem; + // } else if (!childFound) { + // tempItem = new XTreeWidgetItem(tempItem); + // tempItem->setText(0, rawFileStr); + // } - } + // } tempItem->setIcon(0, rawFileIcon); } } - if (!assetMap.menuFiles.isEmpty()) { - QIcon menuFileIcon = ZoneFile::AssetTypeToIcon(ASSET_MENU); + if (!assetMap.menuDefinitions.isEmpty()) { + // QIcon MenuDefIcon = Utils::CreateAssetIcon(Utils::ASSET_MENU); - XTreeWidgetItem *menuRoot = new XTreeWidgetItem(zoneItem); - menuRoot->setText(0, "Menu Files"); - menuRoot->setIcon(0, menuFileIcon); - menuRoot->SetCategory(CATEGORY_TYPE); + // XTreeWidgetItem *menuRoot = new XTreeWidgetItem(zoneItem); + // menuRoot->setText(0, "Menu Files"); + // menuRoot->setIcon(0, MenuDefIcon); + // menuRoot->SetCategory(CATEGORY_TYPE); - int menuIndex = 1; - for (MenuFile menuFile : assetMap.menuFiles) { - XTreeWidgetItem *menuFileRoot = new XTreeWidgetItem(menuRoot); - menuFileRoot->setText(0, QString("Menu %1").arg(menuIndex)); - for (Menu menu : menuFile.menuDefs) { - XTreeWidgetItem *menuItem = new XTreeWidgetItem(menuFileRoot); - menuItem->setText(0, menu.filePath); - menuItem->setIcon(0, menuFileIcon); - } - menuIndex++; - } + // int menuIndex = 1; + // for (MenuDef menuDef : assetMap.menuDefinitions) { + // XTreeWidgetItem *MenuDefRoot = new XTreeWidgetItem(menuRoot); + // MenuDefRoot->setText(0, QString("Menu %1").arg(menuIndex)); + // for (Menu menu : menuDef.men) { + // XTreeWidgetItem *menuItem = new XTreeWidgetItem(MenuDefRoot); + // menuItem->setText(0, menu.filePath); + // menuItem->setIcon(0, MenuDefIcon); + // } + // menuIndex++; + // } } if (!assetMap.images.isEmpty()) { - QIcon imageIcon = ZoneFile::AssetTypeToIcon(ASSET_IMAGE); + // QIcon imageIcon = Utils::CreateAssetIcon(Utils::ASSET_IMAGE); - XTreeWidgetItem *imageRoot = new XTreeWidgetItem(zoneItem); - imageRoot->setText(0, "Images"); - imageRoot->setIcon(0, imageIcon); - imageRoot->SetCategory(CATEGORY_TYPE); + // XTreeWidgetItem *imageRoot = new XTreeWidgetItem(zoneItem); + // imageRoot->setText(0, "Images"); + // imageRoot->setIcon(0, imageIcon); + // imageRoot->SetCategory(CATEGORY_TYPE); - for (Image image : assetMap.images) { - XTreeWidgetItem *imageItem = new XTreeWidgetItem(imageRoot); - imageItem->setText(0, image.materialName); - imageItem->setIcon(0, imageIcon); - } + // for (Image image : assetMap.images) { + // XTreeWidgetItem *imageItem = new XTreeWidgetItem(imageRoot); + // imageItem->setText(0, image.materialName); + // imageItem->setIcon(0, imageIcon); + // } } if (!assetMap.models.isEmpty()) { - QIcon modelIcon = ZoneFile::AssetTypeToIcon(ASSET_MODEL); + QIcon modelIcon = Utils::CreateAssetIcon(Utils::ASSET_XMODEL); XTreeWidgetItem *modelsRoot = new XTreeWidgetItem(zoneItem); modelsRoot->setText(0, "Models"); modelsRoot->setIcon(0, modelIcon); modelsRoot->SetCategory(CATEGORY_TYPE); - for (Model model: assetMap.models) { + for (auto model: assetMap.models) { XTreeWidgetItem *modelItem = new XTreeWidgetItem(modelsRoot); - modelItem->setText(0, model.modelName); + modelItem->setText(0, model.name); modelItem->setIcon(0, modelIcon); } } if (!assetMap.materials.isEmpty()) { - QIcon materialIcon = ZoneFile::AssetTypeToIcon(ASSET_MATERIAL); + QIcon materialIcon = Utils::CreateAssetIcon(Utils::ASSET_MATERIAL); XTreeWidgetItem *materialsRoot = new XTreeWidgetItem(zoneItem); materialsRoot->setText(0, "Materials"); materialsRoot->setIcon(0, materialIcon); materialsRoot->SetCategory(CATEGORY_TYPE); - for (Material material: assetMap.materials) { + for (auto material: assetMap.materials) { XTreeWidgetItem *materialItem = new XTreeWidgetItem(materialsRoot); - materialItem->setText(0, material.name); + //materialItem->setText(0, material.name); materialItem->setIcon(0, materialIcon); } } if (!assetMap.stringTables.isEmpty()) { - QIcon stringTableIcon = ZoneFile::AssetTypeToIcon(ASSET_STRING_TABLE); + QIcon stringTableIcon = Utils::CreateAssetIcon(Utils::ASSET_STRINGTABLE); XTreeWidgetItem *strTableRoot = new XTreeWidgetItem(zoneItem); strTableRoot->setText(0, "String Tables"); strTableRoot->setIcon(0, stringTableIcon); strTableRoot->SetCategory(CATEGORY_TYPE); - for (StringTable strTable: assetMap.stringTables) { + for (auto strTable: assetMap.stringTables) { XTreeWidgetItem *modelItem = new XTreeWidgetItem(strTableRoot); modelItem->setText(0, strTable.name); modelItem->setIcon(0, stringTableIcon); @@ -247,46 +246,12 @@ void XTreeWidget::AddZoneFile(std::shared_ptr aZoneFile, XTreeWidgetIt } if (!assetMap.sounds.isEmpty()) { - QIcon soundIcon = ZoneFile::AssetTypeToIcon(ASSET_SOUND); + QIcon soundIcon = Utils::CreateAssetIcon(Utils::ASSET_SOUND); XTreeWidgetItem *soundsRoot = new XTreeWidgetItem(zoneItem); soundsRoot->setText(0, "Sounds"); soundsRoot->setIcon(0, soundIcon); soundsRoot->SetCategory(CATEGORY_TYPE); - for (SoundAsset soundAsset : assetMap.sounds) { - for (Sound sound : soundAsset.sounds) { - XTreeWidgetItem *tempItem = soundsRoot; - - if (!sound.dataLength) { continue; } - - for (const QString &pathPart : sound.path.split('/')) { - if (pathPart.isEmpty()) { continue; } - - bool childFound = false; - for (int i = 0; i < tempItem->childCount(); i++) { - XTreeWidgetItem *childItem = dynamic_cast(tempItem->child(i)); - if (childItem->text(0) == pathPart) { - tempItem = childItem; - - childFound = true; - break; - } - } - - if (pathPart.contains(".wav")) { - XTreeWidgetItem *soundItem = new XTreeWidgetItem(tempItem); - soundItem->setText(0, pathPart); - - tempItem = soundItem; - } else if (!childFound) { - tempItem = new XTreeWidgetItem(tempItem); - tempItem->setText(0, pathPart); - } - - } - tempItem->setIcon(0, soundIcon); - } - } } mZoneFiles[aZoneFile->GetBaseStem() + ".zone"] = aZoneFile; @@ -518,7 +483,7 @@ void XTreeWidget::PrepareContextMenu(const QPoint &pos) { const QString zoneFilePath = QFileDialog::getSaveFileName( nullptr, "Export Zone File...", QDir::currentPath(), "Zone File (*.zone);;All Files(*.*)"); - fastFile->GetZoneFile()->SaveZoneFile(zoneFilePath); + //fastFile->GetZoneFile()->SaveZoneFile(zoneFilePath); }); } else if (activeText.contains(".zone")) { const QString fileStem = activeText; @@ -553,40 +518,40 @@ void XTreeWidget::PrepareContextMenu(const QPoint &pos) { } if (parentItem && parentItem != invisibleRootItem() && parentItem->text(0).contains(".zone")) { const QString fileStem = parentItem->text(0).section('.', 0, 0); - QVector soundAssets = mZoneFiles[fileStem]->GetAssetMap().sounds; - for (SoundAsset soundAsset : soundAssets) { - for (Sound sound : soundAsset.sounds) { - if (sound.path.contains(activeText)) { - QMenu *exportSubmenu = new QMenu("Export...", this); - contextMenu->addMenu(exportSubmenu); + // QVector LoadedSounds = mZoneFiles[fileStem]->GetAssetMap().sounds; + // for (LoadedSound LoadedSound : LoadedSounds) { + // for (Sound sound : LoadedSound.sounds) { + // if (sound.path.contains(activeText)) { + // QMenu *exportSubmenu = new QMenu("Export...", this); + // contextMenu->addMenu(exportSubmenu); - QAction *exportWAVAction = new QAction("Export as WAV File"); - exportSubmenu->addAction(exportWAVAction); - connect(exportWAVAction, &QAction::triggered, this, [sound](bool checked) { - Q_UNUSED(checked); + // QAction *exportWAVAction = new QAction("Export as WAV File"); + // exportSubmenu->addAction(exportWAVAction); + // connect(exportWAVAction, &QAction::triggered, this, [sound](bool checked) { + // Q_UNUSED(checked); - QDir dir = QDir::currentPath(); - if (!dir.exists("exports/")) { - dir.mkdir("exports/"); - } + // QDir dir = QDir::currentPath(); + // if (!dir.exists("exports/")) { + // dir.mkdir("exports/"); + // } - if (!dir.exists("exports/sounds/")) { - dir.mkdir("exports/sounds/"); - } + // if (!dir.exists("exports/sounds/")) { + // dir.mkdir("exports/sounds/"); + // } - const QString fileName = "exports/sounds/" + sound.path.split('/').last(); - QFile wavFile(fileName); - if (!wavFile.open(QIODevice::WriteOnly)) { - qDebug() << "Failed to write wav file!"; - return; - } - wavFile.write(sound.data); - wavFile.close(); - }); - break; - } - } - } + // const QString fileName = "exports/sounds/" + sound.path.split('/').last(); + // QFile wavFile(fileName); + // if (!wavFile.open(QIODevice::WriteOnly)) { + // qDebug() << "Failed to write wav file!"; + // return; + // } + // wavFile.write(sound.data); + // wavFile.close(); + // }); + // break; + // } + // } + // } } } else if (activeItem && activeText == "Sounds") { XTreeWidgetItem *parentItem = dynamic_cast(activeItem->parent()); @@ -609,29 +574,29 @@ void XTreeWidget::PrepareContextMenu(const QPoint &pos) { connect(exportAllWAVAction, &QAction::triggered, this, [zoneFile](bool checked) { Q_UNUSED(checked); - for (SoundAsset soundAsset : zoneFile->GetAssetMap().sounds) { - for (Sound sound : soundAsset.sounds) { - if (!sound.dataLength) { continue; } + // for (LoadedSound LoadedSound : zoneFile->GetAssetMap().sounds) { + // for (Sound sound : LoadedSound.sounds) { + // if (!sound.dataLength) { continue; } - QDir dir = QDir::currentPath(); - if (!dir.exists("exports/")) { - dir.mkdir("exports/"); - } + // QDir dir = QDir::currentPath(); + // if (!dir.exists("exports/")) { + // dir.mkdir("exports/"); + // } - if (!dir.exists("exports/sounds/")) { - dir.mkdir("exports/sounds/"); - } + // if (!dir.exists("exports/sounds/")) { + // dir.mkdir("exports/sounds/"); + // } - const QString fileName = "exports/sounds/" + sound.path.split('/').last(); - QFile wavFile(fileName); - if (!wavFile.open(QIODevice::WriteOnly)) { - qDebug() << "Failed to write wav file!"; - return; - } - wavFile.write(sound.data); - wavFile.close(); - } - } + // const QString fileName = "exports/sounds/" + sound.path.split('/').last(); + // QFile wavFile(fileName); + // if (!wavFile.open(QIODevice::WriteOnly)) { + // qDebug() << "Failed to write wav file!"; + // return; + // } + // wavFile.write(sound.data); + // wavFile.close(); + // } + // } }); } } @@ -688,13 +653,13 @@ void XTreeWidget::ItemSelectionChanged() { XTreeWidgetItem *grandpaItem = dynamic_cast(parentItem->parent()); if (grandpaItem && grandpaItem->text(0).contains(".zone")) { const QString fileStem = grandpaItem->text(0).section('.', 0, 0); - QVector images = mZoneFiles[fileStem]->GetAssetMap().images; - for (Image image : images) { - if (image.materialName == selectedText) { - emit ImageSelected(std::make_shared(image), fileStem); - break; - } - } + // QVector images = mZoneFiles[fileStem]->GetAssetMap().images; + // for (Image image : images) { + // if (image.materialName == selectedText) { + // emit ImageSelected(std::make_shared(image), fileStem); + // break; + // } + // } } } else if (parentItem && (parentItem->text(0) == "Tech Sets")) { XTreeWidgetItem *grandpaItem = dynamic_cast(parentItem->parent()); @@ -703,19 +668,7 @@ void XTreeWidget::ItemSelectionChanged() { auto techsets = mZoneFiles[fileStem]->GetAssetMap().techSets; for (auto techset : techsets) { if (techset.name == selectedText) { - emit TechSetSelected(std::make_shared(techset), fileStem); - break; - } - } - } - } else if (parentItem && (parentItem->text(0) == "Tech Sets")) { - XTreeWidgetItem *grandpaItem = dynamic_cast(parentItem->parent()); - if (grandpaItem && grandpaItem->text(0).contains(".zone")) { - const QString fileStem = grandpaItem->text(0).section('.', 0, 0); - auto techsets = mZoneFiles[fileStem]->GetAssetMap().techSets; - for (auto techset : techsets) { - if (techset.name == selectedText) { - emit TechSetSelected(std::make_shared(techset), fileStem); + emit TechSetSelected(std::make_shared(techset), fileStem); break; } } @@ -724,12 +677,12 @@ void XTreeWidget::ItemSelectionChanged() { XTreeWidgetItem *grandpaItem = dynamic_cast(parentItem->parent()); if (grandpaItem && grandpaItem->text(0).contains(".zone")) { const QString fileStem = grandpaItem->text(0).section('.', 0, 0); - QVector materials = mZoneFiles[fileStem]->GetAssetMap().materials; - for (Material material : materials) { - if (material.name == selectedText) { - emit MaterialSelected(std::make_shared(material), fileStem); - break; - } + auto materials = mZoneFiles[fileStem]->GetAssetMap().materials; + for (auto material : materials) { + // if (material.name == selectedText) { + // emit MaterialSelected(std::make_shared(material), fileStem); + // break; + // } } } } else if (parentItem && selectedText.contains(".wav")) { @@ -743,15 +696,15 @@ void XTreeWidget::ItemSelectionChanged() { } if (grandpaItem && grandpaItem != invisibleRootItem() && grandpaItem->text(0).contains(".zone")) { const QString fileStem = grandpaItem->text(0).section('.', 0, 0); - QVector soundAssets = mZoneFiles[fileStem]->GetAssetMap().sounds; - for (SoundAsset soundAsset : soundAssets) { - for (Sound sound : soundAsset.sounds) { - if (sound.path.contains(selectedText)) { - emit SoundSelected(std::make_shared(sound), fileStem); - break; - } - } - } + // QVector LoadedSounds = mZoneFiles[fileStem]->GetAssetMap().sounds; + // for (LoadedSound LoadedSound : LoadedSounds) { + // for (Sound sound : LoadedSound.sounds) { + // if (sound.path.contains(selectedText)) { + // emit SoundSelected(std::make_shared(sound), fileStem); + // break; + // } + // } + // } } } else if (selectedItem->GetCategory() != CATEGORY_TYPE) { XTreeWidgetItem *zoneRoot = selectedItem; @@ -772,12 +725,12 @@ void XTreeWidget::ItemSelectionChanged() { return; } - QVector rawFiles = mZoneFiles[fileStem]->GetAssetMap().rawFiles; - for (RawFile rawFile : rawFiles) { - if (rawFile.path.split('/').last() == selectedText) { - emit RawFileSelected(std::make_shared(rawFile), fileStem); - return; - } + auto rawFiles = mZoneFiles[fileStem]->GetAssetMap().rawFiles; + for (auto rawFile : rawFiles) { + //if (rawFile->path.split('/').last() == selectedText) { + // emit RawFileSelected(std::make_shared(rawFile), fileStem); + // return; + //} } } } @@ -819,7 +772,7 @@ void XTreeWidget::AddIWIFile(std::shared_ptr aIWIFile) { } XTreeWidgetItem *iwiItem = new XTreeWidgetItem(this); - iwiItem->setIcon(0, ZoneFile::AssetTypeToIcon(ASSET_IMAGE)); + iwiItem->setIcon(0, Utils::CreateAssetIcon(Utils::ASSET_IMAGE)); iwiItem->setText(0, iwiFileName); mIWIFiles[aIWIFile->fileStem.section(".", 0, 0)] = aIWIFile; } @@ -835,7 +788,7 @@ void XTreeWidget::AddDDSFile(std::shared_ptr aDDSFile) { } XTreeWidgetItem *ddsItem = new XTreeWidgetItem(this); - ddsItem->setIcon(0, ZoneFile::AssetTypeToIcon(ASSET_IMAGE)); + ddsItem->setIcon(0, Utils::CreateAssetIcon(Utils::ASSET_IMAGE)); ddsItem->setText(0, ddsFileName); mDDSFiles[aDDSFile->fileStem.section(".", 0, 0)] = aDDSFile; } diff --git a/app/xtreewidget.h b/app/xtreewidget.h index 5026fca..ba8fdd7 100644 --- a/app/xtreewidget.h +++ b/app/xtreewidget.h @@ -2,13 +2,15 @@ #define XTREEWIDGET_H #include "d3dbsp_structs.h" -#include "asset_structs.h" #include "ddsfile.h" #include "iwifile.h" #include "fastfile.h" #include "xtreewidgetitem.h" #include "zonefile.h" -#include "utils.h" +#include "rawfile.h" +#include "gfximage.h" +#include "stringtable.h" +#include "menudef.h" #include #include @@ -39,11 +41,11 @@ signals: void ZoneFileSelected(std::shared_ptr aZoneFile, const QString aParentName); void LocalStringSelected(std::shared_ptr aZoneFile, const QString aParentName); void RawFileSelected(std::shared_ptr aRawFile, const QString aParentName); - void ImageSelected(std::shared_ptr aImage, const QString aParentName); - void TechSetSelected(std::shared_ptr aZoneFile, const QString aParentName); + void ImageSelected(std::shared_ptr aImage, const QString aParentName); + void TechSetSelected(std::shared_ptr aZoneFile, const QString aParentName); void StrTableSelected(std::shared_ptr aStrTable, const QString aParentName); - void MenuSelected(std::shared_ptr aMenu, const QString aParentName); - void SoundSelected(std::shared_ptr aSound, const QString aParentName); + void MenuSelected(std::shared_ptr aMenu, const QString aParentName); + void SoundSelected(std::shared_ptr aSound, const QString aParentName); void MaterialSelected(std::shared_ptr aMaterial, const QString aParentName); void ItemSelected(const QString itemText); diff --git a/app/zonefileviewer.cpp b/app/zonefileviewer.cpp index 52d736e..8a7b6ba 100644 --- a/app/zonefileviewer.cpp +++ b/app/zonefileviewer.cpp @@ -109,16 +109,16 @@ void ZoneFileViewer::SetZoneFile(std::shared_ptr aZoneFile) { int assetIndex = 0; foreach (auto assetOccurance, assetOccurances) { const QString record = assetOccurance.first; - AssetType assetType = mZoneFile->AssetStrToEnum(record); + Utils::AssetType assetType = mZoneFile->AssetStrToEnum(record); int assetCount = assetOccurance.second; - QIcon assetIcon = mZoneFile->AssetTypeToIcon(assetType); + QIcon assetIcon = Utils::CreateAssetIcon(assetType); if (assetIcon.isNull()) { qDebug() << "Icon is null for record: " << record; } QTableWidgetItem *recordItem = new QTableWidgetItem(record.toUpper()); - QTableWidgetItem *recordStrItem = new QTableWidgetItem(mZoneFile->AssetEnumToStr(assetType)); + QTableWidgetItem *recordStrItem = new QTableWidgetItem(Utils::AssetTypeToStr(assetType)); QTableWidgetItem *recordCountItem = new QTableWidgetItem(QString::number(assetCount)); recordItem->setIcon(assetIcon); @@ -133,8 +133,8 @@ void ZoneFileViewer::SetZoneFile(std::shared_ptr aZoneFile) { for (const QString &record : recordCounts.keys()) { int recordCount = recordCounts[record]; - AssetType assetType = mZoneFile->AssetStrToEnum(record); - QIcon assetIcon = mZoneFile->AssetTypeToIcon(assetType); + Utils::AssetType assetType = mZoneFile->AssetStrToEnum(record); + QIcon assetIcon = Utils::CreateAssetIcon(assetType); if (assetIcon.isNull()) { qDebug() << "Icon is null for record: " << record; } @@ -142,7 +142,7 @@ void ZoneFileViewer::SetZoneFile(std::shared_ptr aZoneFile) { ui->tableWidget_RecordCounts->setRowCount(recordIndex + 1); QTableWidgetItem *recordItem = new QTableWidgetItem(record.toUpper()); - QTableWidgetItem *recordCountStrItem = new QTableWidgetItem(mZoneFile->AssetEnumToStr(assetType)); + QTableWidgetItem *recordCountStrItem = new QTableWidgetItem(Utils::AssetTypeToStr(assetType)); QTableWidgetItem *recordCountItem = new QTableWidgetItem(QString::number(recordCount)); recordItem->setIcon(assetIcon); diff --git a/libs/assets/360/assets_cod4_360.cpp b/libs/assets/360/assets_cod4_360.cpp index 3de9793..0d4a566 100644 --- a/libs/assets/360/assets_cod4_360.cpp +++ b/libs/assets/360/assets_cod4_360.cpp @@ -1,6 +1,8 @@ #include "assets_cod4_360.h" -Assets_COD4_360::Assets_COD4_360() { +Assets_COD4_360::Assets_COD4_360(QObject *parent) + : Assets(parent) +{ } @@ -8,106 +10,3 @@ Assets_COD4_360::~Assets_COD4_360() { } -std::shared_ptr Assets_COD4_360::Load_Animation(QDataStream *aZoneFileStream) { - return nullptr; -} - -std::shared_ptr Assets_COD4_360::Load_Model(QDataStream *aZoneFileStream) { - return nullptr; -} - -std::shared_ptr Assets_COD4_360::Load_Material(QDataStream *aZoneFileStream) { - return nullptr; -} - -std::shared_ptr Assets_COD4_360::Load_MaterialPixelShader(QDataStream *aZoneFileStream) { - return nullptr; -} - -std::shared_ptr Assets_COD4_360::Load_MaterialTechSet(QDataStream *aZoneFileStream) { - return nullptr; -} - -std::shared_ptr Assets_COD4_360::Load_GfxImage(QDataStream *aZoneFileStream) { - return nullptr; -} - -std::shared_ptr Assets_COD4_360::Load_SoundAliasList(QDataStream *aZoneFileStream) { - return nullptr; -} - -std::shared_ptr Assets_COD4_360::Load_SoundCurve(QDataStream *aZoneFileStream) { - return nullptr; -} - -std::shared_ptr Assets_COD4_360::Load_LoadedSound(QDataStream *aZoneFileStream) { - return nullptr; -} - -std::shared_ptr Assets_COD4_360::Load_ClipMap(QDataStream *aZoneFileStream) { - return nullptr; -} - -std::shared_ptr Assets_COD4_360::Load_ComWorld(QDataStream *aZoneFileStream) { - return nullptr; -} - -std::shared_ptr Assets_COD4_360::Load_GameWorldSp(QDataStream *aZoneFileStream) { - return nullptr; -} - -std::shared_ptr Assets_COD4_360::Load_GameWorldMp(QDataStream *aZoneFileStream) { - return nullptr; -} - -std::shared_ptr Assets_COD4_360::Load_MapEnts(QDataStream *aZoneFileStream) { - return nullptr; -} - -std::shared_ptr Assets_COD4_360::Load_GfxWorld(QDataStream *aZoneFileStream){ - return nullptr; -} - -std::shared_ptr Assets_COD4_360::Load_GfxLightPtr(QDataStream *aZoneFileStream) { - return nullptr; -} - -std::shared_ptr Assets_COD4_360::Load_GameFont(QDataStream *aZoneFileStream) { - return nullptr; -} - -std::shared_ptr Assets_COD4_360::Load_MenuList(QDataStream *aZoneFileStream) { - return nullptr; -} - -std::shared_ptr Assets_COD4_360::Load_MenuDef(QDataStream *aZoneFileStream) { - return nullptr; -} - -std::shared_ptr Assets_COD4_360::Load_LocalizeEntry(QDataStream *aZoneFileStream) { - return nullptr; -} - -std::shared_ptr Assets_COD4_360::Load_WeaponDef(QDataStream *aZoneFileStream) { - return nullptr; -} - -std::shared_ptr Assets_COD4_360::Load_SoundDriver(QDataStream *aZoneFileStream) { - return nullptr; -} - -std::shared_ptr Assets_COD4_360::Load_EffectDef(QDataStream *aZoneFileStream) { - return nullptr; -} - -std::shared_ptr Assets_COD4_360::Load_ImpactTable(QDataStream *aZoneFileStream) { - return nullptr; -} - -std::shared_ptr Assets_COD4_360::Load_RawFile(QDataStream *aZoneFileStream) { - return nullptr; -} - -std::shared_ptr Assets_COD4_360::Load_StringTable(QDataStream *aZoneFileStream) { - return nullptr; -} diff --git a/libs/assets/360/assets_cod4_360.h b/libs/assets/360/assets_cod4_360.h index 285208a..a83ed48 100644 --- a/libs/assets/360/assets_cod4_360.h +++ b/libs/assets/360/assets_cod4_360.h @@ -5,36 +5,11 @@ class Assets_COD4_360 : public Assets { -public: - Assets_COD4_360(); - ~Assets_COD4_360(); + Q_OBJECT - std::shared_ptr Load_Animation(QDataStream *aZoneFileStream) override; - std::shared_ptr Load_Model(QDataStream *aZoneFileStream) override; - std::shared_ptr Load_Material(QDataStream *aZoneFileStream) override; - std::shared_ptr Load_MaterialPixelShader(QDataStream *aZoneFileStream) override; - std::shared_ptr Load_MaterialTechSet(QDataStream *aZoneFileStream) override; - std::shared_ptr Load_GfxImage(QDataStream *aZoneFileStream) override; - std::shared_ptr Load_SoundAliasList(QDataStream *aZoneFileStream) override; - std::shared_ptr Load_SoundCurve(QDataStream *aZoneFileStream) override; - std::shared_ptr Load_LoadedSound(QDataStream *aZoneFileStream) override; - std::shared_ptr Load_ClipMap(QDataStream *aZoneFileStream) override; - std::shared_ptr Load_ComWorld(QDataStream *aZoneFileStream) override; - std::shared_ptr Load_GameWorldSp(QDataStream *aZoneFileStream) override; - std::shared_ptr Load_GameWorldMp(QDataStream *aZoneFileStream) override; - std::shared_ptr Load_MapEnts(QDataStream *aZoneFileStream) override; - std::shared_ptr Load_GfxWorld(QDataStream *aZoneFileStream) override; - std::shared_ptr Load_GfxLightPtr(QDataStream *aZoneFileStream) override; - std::shared_ptr Load_GameFont(QDataStream *aZoneFileStream) override; - std::shared_ptr Load_MenuList(QDataStream *aZoneFileStream) override; - std::shared_ptr Load_MenuDef(QDataStream *aZoneFileStream) override; - std::shared_ptr Load_LocalizeEntry(QDataStream *aZoneFileStream) override; - std::shared_ptr Load_WeaponDef(QDataStream *aZoneFileStream) override; - std::shared_ptr Load_SoundDriver(QDataStream *aZoneFileStream) override; - std::shared_ptr Load_EffectDef(QDataStream *aZoneFileStream) override; - std::shared_ptr Load_ImpactTable(QDataStream *aZoneFileStream) override; - std::shared_ptr Load_RawFile(QDataStream *aZoneFileStream) override; - std::shared_ptr Load_StringTable(QDataStream *aZoneFileStream) override; +public: + explicit Assets_COD4_360(QObject *parent = nullptr); + ~Assets_COD4_360(); }; #endif // ASSETS_COD4_360_H diff --git a/libs/assets/animparts.cpp b/libs/assets/animparts.cpp new file mode 100644 index 0000000..6c6df6c --- /dev/null +++ b/libs/assets/animparts.cpp @@ -0,0 +1,648 @@ +#include "animparts.h" + +#include + +QDataStream &operator<<(QDataStream &aDataStream, const XAnimDynamicFrames &aAnimDynamicFramesIn) +{ + aDataStream << aAnimDynamicFramesIn.framesPtr; + + return aDataStream; +} + +QDataStream &operator>>(QDataStream &aDataStream, XAnimDynamicFrames &aAnimDynamicFramesOut) +{ + aDataStream >> aAnimDynamicFramesOut.framesPtr; + + return aDataStream; +} +QString XAnimDynamicFramesToString(const XAnimDynamicFrames &aAnimDynamicFrames) { + QString debug; + + debug.append("XAnimDynamicFrames("); + + debug.append(QString("\n framesPtr: %1").arg(aAnimDynamicFrames.framesPtr)); + for (int i = 0; i < 3; i++) { + debug.append(QString("\n frames %1: %2").arg(i).arg(aAnimDynamicFrames.frames[i])); + } + + debug.append("\n)"); + + return debug; +} + +QDataStream &operator<<(QDataStream &aDataStream, const XAnimDynamicIndices &aAnimDynamicIndicesIn) +{ + aDataStream << aAnimDynamicIndicesIn.indices[0]; + + return aDataStream; +} + +QDataStream &operator>>(QDataStream &aDataStream, XAnimDynamicIndices &aAnimDynamicIndicesOut) +{ + aDataStream >> aAnimDynamicIndicesOut.indices[0]; + + return aDataStream; +} +QString XAnimDynamicIndicesToString(const XAnimDynamicIndices &aAnimDynamicIndices) { + QString debug; + + debug.append("XAnimDynamicIndices("); + + debug.append(QString("\n indices: %1").arg(aAnimDynamicIndices.indices[0])); + + debug.append("\n)"); + + return debug; +} + +QDataStream &operator<<(QDataStream &aDataStream, const XAnimPartTransFrames &aAnimPartTransFramesIn) +{ + for (int i = 0; i < 3; i++) { + aDataStream << aAnimPartTransFramesIn.mins[i]; + } + + for (int i = 0; i < 3; i++) { + aDataStream << aAnimPartTransFramesIn.size[i]; + } + + aDataStream + << aAnimPartTransFramesIn.frames + << aAnimPartTransFramesIn.indices; + + return aDataStream; +} + +QDataStream &operator>>(QDataStream &aDataStream, XAnimPartTransFrames &aAnimPartTransFramesOut) +{ + for (int i = 0; i < 3; i++) { + aDataStream >> aAnimPartTransFramesOut.mins[i]; + } + + for (int i = 0; i < 3; i++) { + aDataStream >> aAnimPartTransFramesOut.size[i]; + } + + aDataStream + >> aAnimPartTransFramesOut.frames + >> aAnimPartTransFramesOut.indices; + + return aDataStream; +} +QString XAnimPartTransFramesToString(const XAnimPartTransFrames &aAnimPartTransFrames) { + QString debug; + + debug.append("XAnimPartTransFrames("); + + for (int i = 0; i < 3; i++) { + debug.append(QString("\n mins %1: %2").arg(i).arg(aAnimPartTransFrames.mins[i])); + } + for (int i = 0; i < 3; i++) { + debug.append(QString("\n size %1: %2").arg(i).arg(aAnimPartTransFrames.size[i])); + } + debug.append(QString("\n frames: %1").arg(XAnimDynamicFramesToString(aAnimPartTransFrames.frames))); + debug.append(QString("\n frames: %1").arg(XAnimDynamicIndicesToString(aAnimPartTransFrames.indices))); + + debug.append("\n)"); + + return debug; +} + +QDataStream &operator<<(QDataStream &aDataStream, const XAnimPartTransData &aAnimPartTransDataIn) +{ + aDataStream + << aAnimPartTransDataIn.frames; + + for (int i = 0; i < 3; i++) { + aDataStream << aAnimPartTransDataIn.frame0[i]; + } + + return aDataStream; +} + +QDataStream &operator>>(QDataStream &aDataStream, XAnimPartTransData &aAnimPartTransDataOut) +{ + aDataStream + >> aAnimPartTransDataOut.frames; + + for (int i = 0; i < 3; i++) { + aDataStream >> aAnimPartTransDataOut.frame0[i]; + } + + return aDataStream; +} +QString XAnimPartTransDataToString(const XAnimPartTransData &aAnimPartTransData) { + QString debug; + + debug.append("XAnimPartTransData("); + + debug.append(QString("\n frames: %1").arg(XAnimPartTransFramesToString(aAnimPartTransData.frames))); + + for (int i = 0; i < 3; i++) { + debug.append(QString("\n smallTrans: %1").arg(aAnimPartTransData.frame0[i])); + } + debug.append("\n)"); + + return debug; +} + +QDataStream &operator<<(QDataStream &aDataStream, const XAnimPartTrans &aAnimPartTransIn) +{ + aDataStream + << aAnimPartTransIn.size + << aAnimPartTransIn.smallTrans + << aAnimPartTransIn.data; + + return aDataStream; +} + +QDataStream &operator>>(QDataStream &aDataStream, XAnimPartTrans &aAnimPartTransOut) +{ + aDataStream + >> aAnimPartTransOut.size + >> aAnimPartTransOut.smallTrans + >> aAnimPartTransOut.data; + + return aDataStream; +} +QString XAnimPartTransToString(const XAnimPartTrans &aAnimPartTrans) { + QString debug; + + debug.append("XAnimPartTrans("); + + debug.append(QString("\n size: %1").arg(aAnimPartTrans.size)); + debug.append(QString("\n smallTrans: %1").arg(aAnimPartTrans.smallTrans)); + debug.append(QString("\n data: %1").arg(XAnimPartTransDataToString(aAnimPartTrans.data))); + debug.append("\n)"); + + return debug; +} + +QDataStream &operator<<(QDataStream &aDataStream, const XAnimDeltaPartQuatDataFrames &aAnimDeltaPartQuatDataFramesIn) +{ + aDataStream + << aAnimDeltaPartQuatDataFramesIn.framesPtr + << aAnimDeltaPartQuatDataFramesIn.indices; + + return aDataStream; +} + +QDataStream &operator>>(QDataStream &aDataStream, XAnimDeltaPartQuatDataFrames &aAnimDeltaPartQuatDataFramesOut) +{ + aDataStream + >> aAnimDeltaPartQuatDataFramesOut.framesPtr + >> aAnimDeltaPartQuatDataFramesOut.indices; + + return aDataStream; +} +QString XAnimDeltaPartQuatDataFramesToString(const XAnimDeltaPartQuatDataFrames &aAnimDeltaPartQuatDataFrames) { + QString debug; + + debug.append("XAnimDeltaPartQuatDataFrames("); + + debug.append(QString("\n framesPtr: %1").arg(aAnimDeltaPartQuatDataFrames.framesPtr)); + for (int i = 0; i < 2; i++) { + debug.append(QString("\n frames %1: %2").arg(i).arg(aAnimDeltaPartQuatDataFrames.frames[i])); + } + debug.append(QString("\n indices: %1").arg(XAnimDynamicIndicesToString(aAnimDeltaPartQuatDataFrames.indices))); + debug.append("\n)"); + + return debug; +} + +QDataStream &operator<<(QDataStream &aDataStream, const XAnimDeltaPartQuatData &aAnimDeltaPartQuatDataIn) +{ + aDataStream + << aAnimDeltaPartQuatDataIn.frames; + + for (int i = 0; i < 2; i++) { + aDataStream << aAnimDeltaPartQuatDataIn.frame0[i]; + } + + return aDataStream; +} + +QDataStream &operator>>(QDataStream &aDataStream, XAnimDeltaPartQuatData &aAnimDeltaPartQuatDataOut) +{ + aDataStream + >> aAnimDeltaPartQuatDataOut.frames; + + for (int i = 0; i < 2; i++) { + aDataStream >> aAnimDeltaPartQuatDataOut.frame0[i]; + } + + return aDataStream; +} +QString XAnimDeltaPartQuatDataToString(const XAnimDeltaPartQuatData &aAnimDeltaPartQuatData) { + QString debug; + + debug.append("XAnimDeltaPartQuatData("); + + debug.append(QString("\n frames: %1").arg(XAnimDeltaPartQuatDataFramesToString(aAnimDeltaPartQuatData.frames))); + for (int i = 0; i < 2; i++) { + debug.append(QString("\n frame0 %1: %2").arg(i).arg(aAnimDeltaPartQuatData.frame0[i])); + } + debug.append("\n)"); + + return debug; +} + +QDataStream &operator<<(QDataStream &aDataStream, const XAnimDeltaPartQuat &aAnimDeltaPartQuatIn) +{ + aDataStream + << aAnimDeltaPartQuatIn.size + << aAnimDeltaPartQuatIn.data; + + return aDataStream; +} + +QDataStream &operator>>(QDataStream &aDataStream, XAnimDeltaPartQuat &aAnimDeltaPartQuatOut) +{ + aDataStream + >> aAnimDeltaPartQuatOut.size + >> aAnimDeltaPartQuatOut.data; + + return aDataStream; +} +QString XAnimDeltaPartQuatToString(const XAnimDeltaPartQuat &aAnimDeltaPartQuat) { + QString debug; + + debug.append("XAnimDeltaPartQuat("); + + debug.append(QString("\n size: %1").arg(aAnimDeltaPartQuat.size)); + debug.append(QString("\n data: %1").arg(XAnimDeltaPartQuatDataToString(aAnimDeltaPartQuat.data))); + debug.append("\n)"); + + return debug; +} + +QDataStream &operator<<(QDataStream &aDataStream, const XAnimDeltaPart &aAnimDeltaPartIn) +{ + aDataStream + << aAnimDeltaPartIn.transPtr + << aAnimDeltaPartIn.quatPtr; + + return aDataStream; +} + +QDataStream &operator>>(QDataStream &aDataStream, XAnimDeltaPart &aAnimDeltaPartOut) +{ + aDataStream + >> aAnimDeltaPartOut.transPtr + >> aAnimDeltaPartOut.quatPtr; + + return aDataStream; +} +QString XAnimDeltaPartToString(const XAnimDeltaPart &aAnimDeltaPart) { + QString debug; + + debug.append("XAnimDeltaPart("); + + debug.append(QString("\n transPtr: %1").arg(aAnimDeltaPart.transPtr)); + debug.append(QString("\n trans: %1").arg(XAnimPartTransToString(aAnimDeltaPart.trans))); + debug.append(QString("\n quatPtr: %1").arg(aAnimDeltaPart.quatPtr)); + debug.append(QString("\n quat: %1").arg(XAnimDeltaPartQuatToString(aAnimDeltaPart.quat))); + debug.append("\n)"); + + return debug; +} + +QDataStream &operator<<(QDataStream &aDataStream, const XAnimNotifyInfo &aAnimNotifyInfoIn) +{ + aDataStream + << aAnimNotifyInfoIn.name + << aAnimNotifyInfoIn.time; + + return aDataStream; +} +QDebug operator<<(QDebug debug, const XAnimNotifyInfo &aAnimNotifyInfo) { + QDebugStateSaver saver(debug); + debug.noquote().nospace(); + + debug << "XAnimNotifyInfo("; + + debug << "\n name: " << aAnimNotifyInfo.name; + debug << "\n time: " << aAnimNotifyInfo.time; + debug << "\n)"; + + return debug; +} +QString XAnimNotifyInfoToString(const XAnimNotifyInfo &aAnimNotifyInfo) { + QString debug; + + debug.append("XAnimNotifyInfo("); + + debug.append(QString("\n name: %1").arg(aAnimNotifyInfo.name)); + debug.append(QString("\n time: %1").arg(aAnimNotifyInfo.time)); + debug.append("\n)"); + + return debug; +} + +QDataStream &operator>>(QDataStream &aDataStream, XAnimNotifyInfo &aAnimNotifyInfoOut) +{ + aDataStream + >> aAnimNotifyInfoOut.name + >> aAnimNotifyInfoOut.time; + + return aDataStream; +} + +QDataStream &operator<<(QDataStream &aDataStream, const XAnimIndices &aAnimIndicesIn) +{ + aDataStream + << aAnimIndicesIn.indexPtr + << aAnimIndicesIn.index; + + return aDataStream; +} +QDebug operator<<(QDebug debug, const XAnimIndices &aAnimIndices) { + QDebugStateSaver saver(debug); + debug.noquote().nospace(); + + debug << "XAnimIndices("; + + debug << "\n name: " << aAnimIndices.indexPtr; + debug << "\n namePtr: " << aAnimIndices.index; + debug << "\n)"; + + return debug; +} +QString XAnimIndicesToString(const XAnimIndices &aAnimIndices) { + QString debug; + + debug.append("XAnimIndices("); + + debug.append(QString("\n name: %1").arg(aAnimIndices.indexPtr)); + debug.append(QString("\n namePtr: %1").arg(aAnimIndices.index)); + debug.append("\n)"); + + return debug; +} + +QDataStream &operator>>(QDataStream &aDataStream, XAnimIndices &aAnimIndicesOut) +{ + aDataStream + >> aAnimIndicesOut.indexPtr + >> aAnimIndicesOut.index; + + return aDataStream; +} + +QDataStream &operator<<(QDataStream &aDataStream, const XAnimParts &aAnimPartIn) +{ + aDataStream + << aAnimPartIn.name + << aAnimPartIn.dataByteCount + << aAnimPartIn.dataShortCount + << aAnimPartIn.dataIntCount + << aAnimPartIn.randomDataByteCount + << aAnimPartIn.randomDataIntCount + << aAnimPartIn.numframes + << aAnimPartIn.bLoop + << aAnimPartIn.bDelta; + + for (int i = 0; i < 12; i++) { + aDataStream << aAnimPartIn.boneCount[i]; + } + + aDataStream + << aAnimPartIn.notifyCount + << aAnimPartIn.pad + << aAnimPartIn.randomDataShortCount + << aAnimPartIn.indexCount + << aAnimPartIn.framerate + << aAnimPartIn.frequency + << aAnimPartIn.namesPtr + << aAnimPartIn.dataBytePtr + << aAnimPartIn.dataShortPtr + << aAnimPartIn.dataIntPtr + << aAnimPartIn.randomDataShortPtr + << aAnimPartIn.randomDataBytePtr + << aAnimPartIn.randomDataIntPtr + << aAnimPartIn.indices + << aAnimPartIn.notifyPtr + << aAnimPartIn.deltaPartPtr; + + return aDataStream; +} + +quint32 ROL4(quint32 value, int positions) { + return (value << positions) | (value >> (32 - positions)); +} + +QDataStream &operator>>(QDataStream &aDataStream, XAnimParts &aAnimPartOut) +{ + aDataStream + >> aAnimPartOut.namePtr + >> aAnimPartOut.dataByteCount + >> aAnimPartOut.dataShortCount + >> aAnimPartOut.dataIntCount + >> aAnimPartOut.randomDataByteCount + >> aAnimPartOut.randomDataIntCount + >> aAnimPartOut.numframes + >> aAnimPartOut.bLoop + >> aAnimPartOut.bDelta; + + for (int i = 0; i < 12; i++) { + aDataStream >> aAnimPartOut.boneCount[i]; + } + + aDataStream + >> aAnimPartOut.notifyCount + >> aAnimPartOut.assetType + >> aAnimPartOut.pad; + + aDataStream.skipRawData(3); + + aDataStream + >> aAnimPartOut.randomDataShortCount + >> aAnimPartOut.indexCount; + + quint32 framerateInt, frequencyInt; + aDataStream + >> framerateInt + >> frequencyInt + >> aAnimPartOut.namesPtr + >> aAnimPartOut.dataBytePtr + >> aAnimPartOut.dataShortPtr + >> aAnimPartOut.dataIntPtr + >> aAnimPartOut.randomDataShortPtr + >> aAnimPartOut.randomDataBytePtr + >> aAnimPartOut.randomDataIntPtr + >> aAnimPartOut.indices + >> aAnimPartOut.notifyPtr + >> aAnimPartOut.deltaPartPtr; + + aAnimPartOut.framerate = *reinterpret_cast(&framerateInt); + aAnimPartOut.frequency = *reinterpret_cast(&frequencyInt); + + if (aAnimPartOut.namePtr) { + aAnimPartOut.name = ""; + + char animNameChar; + aDataStream >> animNameChar; + while (animNameChar != '\0') { + aAnimPartOut.name += animNameChar; + + aDataStream >> animNameChar; + } + } + if (aAnimPartOut.namesPtr) { + int nameCount = aAnimPartOut.boneCount[11]; + aDataStream.skipRawData(2 * nameCount); + + for (int i = 0; i < nameCount; i++) { + aDataStream.skipRawData(2); + } + } + if (aAnimPartOut.notifyPtr) { + int notifyCount = aAnimPartOut.notifyCount; + aDataStream.skipRawData(8 * notifyCount); + + for (int i = 0; i < notifyCount; i++) { + aDataStream.skipRawData(8); + aDataStream >> aAnimPartOut.notify; + } + } + if (aAnimPartOut.deltaPartPtr) { + aDataStream >> aAnimPartOut.deltaPart; + if (aAnimPartOut.deltaPart.transPtr) { + aDataStream >> aAnimPartOut.deltaPart.trans; + + if (aAnimPartOut.deltaPart.trans.size) { + aDataStream >> aAnimPartOut.deltaPart.trans.data.frames; + quint32 size = aAnimPartOut.deltaPart.trans.size; + quint32 readSize; + if (aAnimPartOut.numframes >= 0x100) { + readSize = 2 * (size + 1); + } else { + readSize = size + 1; + } + aDataStream >> aAnimPartOut.deltaPart.trans.data.frames.indices; + + if (aAnimPartOut.deltaPart.trans.smallTrans) { + if (aAnimPartOut.deltaPart.trans.data.frames.frames.framesPtr) { + aDataStream.skipRawData(3 * (aAnimPartOut.deltaPart.trans.size + 1)); + } + } else if (aAnimPartOut.deltaPart.trans.data.frames.frames.framesPtr) { + aDataStream.skipRawData(6 * (aAnimPartOut.deltaPart.trans.size + 1)); + } + } + } + if (aAnimPartOut.deltaPart.quatPtr) { + aDataStream >> aAnimPartOut.deltaPart.quat; + + if (aAnimPartOut.deltaPart.quat.size) { + aDataStream >> aAnimPartOut.deltaPart.quat.data.frames; + aDataStream >> aAnimPartOut.deltaPart.quat.data.frames.indices; + + if (aAnimPartOut.deltaPart.quat.data.frames.framesPtr) { + aDataStream.skipRawData(4 * (aAnimPartOut.deltaPart.quat.size + 1)); + } + } else { + aDataStream >> aAnimPartOut.deltaPart.quat.data; + } + } + } + if (aAnimPartOut.dataBytePtr) { + aDataStream.skipRawData(aAnimPartOut.dataByteCount); + } + if (aAnimPartOut.dataShortPtr) { + aDataStream.skipRawData(ROL4(aAnimPartOut.dataShortCount, 1)); + } + if (aAnimPartOut.dataIntPtr) { + aDataStream.skipRawData(ROL4(aAnimPartOut.dataIntCount, 2)); + } + if (aAnimPartOut.randomDataShortPtr) { + aDataStream.skipRawData(2 * aAnimPartOut.randomDataShortCount); + } + if (aAnimPartOut.randomDataBytePtr) { + aDataStream.skipRawData(2 * aAnimPartOut.randomDataByteCount); + } + if (aAnimPartOut.randomDataIntPtr) { + aDataStream.skipRawData(ROL4(aAnimPartOut.randomDataIntCount, 2)); + } + + qDebug() << aDataStream.device()->pos(); + + return aDataStream; +} + +QString XAnimPartsToString(const XAnimParts &xAnimParts) { + QString debug = ""; + + debug.append(QString("XAnimParts(")); + + debug.append(QString("\n name: %1").arg(xAnimParts.name)); + debug.append(QString("\n namePtr: %1").arg(QString::number(xAnimParts.namePtr, 16))); + + debug.append(QString("\n dataByteCount: %1").arg(xAnimParts.dataByteCount)); + debug.append(QString("\n dataShortCount: %1").arg(xAnimParts.dataShortCount)); + debug.append(QString("\n dataIntCount: %1").arg(xAnimParts.dataIntCount)); + debug.append(QString("\n randomDataByteCount: %1").arg(xAnimParts.randomDataByteCount)); + debug.append(QString("\n randomDataIntCount: %1").arg(xAnimParts.randomDataIntCount)); + debug.append(QString("\n numframes: %1").arg(xAnimParts.numframes)); + + debug.append(QString("\n bLoop: %1").arg(xAnimParts.bLoop)); + debug.append(QString("\n bDelta: %1").arg(xAnimParts.bDelta)); + + for (int i = 0; i < 12; i++) { + debug.append(QString("\n boneCount %1: %2").arg(i).arg(xAnimParts.boneCount[i])); + } + + debug.append(QString("\n notifyCount: %1").arg(xAnimParts.notifyCount)); + debug.append(QString("\n assetType: %1").arg(xAnimParts.assetType)); + + debug.append(QString("\n pad: %1").arg(xAnimParts.pad)); + + debug.append(QString("\n randomDataShortCount: %1").arg(xAnimParts.randomDataShortCount)); + debug.append(QString("\n indexCount: %1").arg(xAnimParts.indexCount)); + + debug.append(QString("\n framerate: %1").arg(xAnimParts.framerate)); + debug.append(QString("\n frequency: %1").arg(xAnimParts.frequency)); + + debug.append(QString("\n namesPtr: %1").arg(QString::number(xAnimParts.namesPtr, 16))); + debug.append(QString("\n names: %1").arg(xAnimParts.names)); + + debug.append(QString("\n dataBytePtr: %1").arg(QString::number(xAnimParts.dataBytePtr, 16))); + debug.append(QString("\n dataByte: %1").arg(xAnimParts.dataByte)); + + debug.append(QString("\n dataShortPtr: %1").arg(QString::number(xAnimParts.dataShortPtr, 16))); + debug.append(QString("\n dataShort: %1").arg(xAnimParts.dataShort)); + + debug.append(QString("\n dataIntPtr: %1").arg(QString::number(xAnimParts.dataIntPtr, 16))); + debug.append(QString("\n dataInt: %1").arg(xAnimParts.dataInt)); + + debug.append(QString("\n randomDataShortPtr: %1").arg(QString::number(xAnimParts.randomDataShortPtr, 16))); + debug.append(QString("\n randomDataShort: %1").arg(xAnimParts.randomDataShort)); + + debug.append(QString("\n randomDataBytePtr: %1").arg(QString::number(xAnimParts.randomDataBytePtr, 16))); + debug.append(QString("\n randomDataByte: %1").arg(xAnimParts.randomDataByte)); + + debug.append(QString("\n randomDataIntPtr: %1").arg(QString::number(xAnimParts.randomDataIntPtr, 16))); + debug.append(QString("\n randomDataInt: %1").arg(xAnimParts.randomDataInt)); + + debug.append(QString("\n indices: %1").arg(XAnimIndicesToString(xAnimParts.indices))); + + debug.append(QString("\n notifyPtr: %1").arg(QString::number(xAnimParts.notifyPtr, 16))); + debug.append(QString("\n notify: %1").arg(XAnimNotifyInfoToString(xAnimParts.notify))); + + debug.append(QString("\n deltaPartPtr: %1").arg(QString::number(xAnimParts.deltaPartPtr, 16))); + debug.append(QString("\n deltaPart: %1").arg(XAnimDeltaPartToString(xAnimParts.deltaPart))); + + debug.append(QString("\n)")); + + return debug; +} + +QDebug operator<<(QDebug debug, const XAnimParts &xanimParts) { + QDebugStateSaver saver(debug); + debug.noquote().nospace(); + + debug << XAnimPartsToString(xanimParts); + + return debug; +} + + + diff --git a/libs/assets/animparts.h b/libs/assets/animparts.h index 78130cd..e734069 100644 --- a/libs/assets/animparts.h +++ b/libs/assets/animparts.h @@ -3,18 +3,22 @@ #include #include +#include -union XAnimDynamicFrames +struct XAnimDynamicFrames { - quint8 (*_1)[3]; - quint16 (*_2)[3]; + quint32 framesPtr; + quint8 frames[3]; }; +QDataStream &operator<<(QDataStream &aDataStream, const XAnimDynamicFrames &aAnimDynamicFramesIn); +QDataStream &operator>>(QDataStream &aDataStream, XAnimDynamicFrames &aAnimDynamicFramesOut); -union XAnimDynamicIndices +struct XAnimDynamicIndices { - quint8 _1[1]; - quint16 _2[1]; + quint8 indices[1]; }; +QDataStream &operator<<(QDataStream &aDataStream, const XAnimDynamicIndices &aAnimDynamicIndicesIn); +QDataStream &operator>>(QDataStream &aDataStream, XAnimDynamicIndices &aAnimDynamicIndicesOut); struct XAnimPartTransFrames { @@ -23,61 +27,87 @@ struct XAnimPartTransFrames XAnimDynamicFrames frames; XAnimDynamicIndices indices; }; +QDataStream &operator<<(QDataStream &aDataStream, const XAnimPartTransFrames &aAnimPartTransFramesIn); +QDataStream &operator>>(QDataStream &aDataStream, XAnimPartTransFrames &aAnimPartTransFramesOut); union XAnimPartTransData { XAnimPartTransFrames frames; float frame0[3]; }; +QDataStream &operator<<(QDataStream &aDataStream, const XAnimPartTransData &aAnimPartTransDataIn); +QDataStream &operator>>(QDataStream &aDataStream, XAnimPartTransData &aAnimPartTransDataOut); struct XAnimPartTrans { quint16 size; quint8 smallTrans; - XAnimPartTransData u; + XAnimPartTransData data; }; +QDataStream &operator<<(QDataStream &aDataStream, const XAnimPartTrans &aAnimPartTransIn); +QDataStream &operator>>(QDataStream &aDataStream, XAnimPartTrans &aAnimPartTransOut); struct XAnimDeltaPartQuatDataFrames { - qint16 (*frames)[2]; + quint32 framesPtr; + qint16 frames[2]; + XAnimDynamicIndices indices; }; +QDataStream &operator<<(QDataStream &aDataStream, const XAnimDeltaPartQuatDataFrames &aAnimDeltaPartQuatDataFramesIn); +QDataStream &operator>>(QDataStream &aDataStream, XAnimDeltaPartQuatDataFrames &aAnimDeltaPartQuatDataFramesOut); -union XAnimDeltaPartQuatData +struct XAnimDeltaPartQuatData { XAnimDeltaPartQuatDataFrames frames; qint16 frame0[2]; }; +QDataStream &operator<<(QDataStream &aDataStream, const XAnimDeltaPartQuatData &aAnimDeltaPartQuatDataIn); +QDataStream &operator>>(QDataStream &aDataStream, XAnimDeltaPartQuatData &aAnimDeltaPartQuatDataOut); struct XAnimDeltaPartQuat { quint16 size; - XAnimDeltaPartQuatData u; + XAnimDeltaPartQuatData data; }; +QDataStream &operator<<(QDataStream &aDataStream, const XAnimDeltaPartQuat &aAnimDeltaPartQuatIn); +QDataStream &operator>>(QDataStream &aDataStream, XAnimDeltaPartQuat &aAnimDeltaPartQuatOut); struct XAnimDeltaPart { - XAnimPartTrans *trans; - XAnimDeltaPartQuat *quat; + quint32 transPtr; + XAnimPartTrans trans; + + quint32 quatPtr; + XAnimDeltaPartQuat quat; }; +QDataStream &operator<<(QDataStream &aDataStream, const XAnimDeltaPart &aAnimDeltaPartIn); +QDataStream &operator>>(QDataStream &aDataStream, XAnimDeltaPart &aAnimDeltaPartOut); struct XAnimNotifyInfo { quint16 name; float time; }; +QDataStream &operator<<(QDataStream &aDataStream, const XAnimNotifyInfo &aAnimNotifyInfoIn); +QDataStream &operator>>(QDataStream &aDataStream, XAnimNotifyInfo &aAnimNotifyInfoOut); +QDebug operator<<(QDebug debug, const XAnimNotifyInfo &aAnimNotifyInfo); +QString XAnimNotifyInfoToString(const XAnimNotifyInfo &aAnimNotifyInfo); struct XAnimIndices { - quint8 *_1; - quint16 *_2; - void *data; + quint32 indexPtr; + quint16 index; }; +QDataStream &operator<<(QDataStream &aDataStream, const XAnimIndices &aAnimIndicesIn); +QDataStream &operator>>(QDataStream &aDataStream, XAnimIndices &aAnimIndicesOut); +QDebug operator<<(QDebug debug, const XAnimIndices &aAnimIndices); +QString XAnimIndicesToString(const XAnimIndices &aAnimIndices); struct XAnimParts { - qint32 namePtr; QString name; + quint32 namePtr; quint16 dataByteCount; quint16 dataShortCount; @@ -95,19 +125,32 @@ struct XAnimParts bool pad; - unsigned int randomDataShortCount; - unsigned int indexCount; + quint16 randomDataShortCount; + quint16 indexCount; float framerate; float frequency; - quint16 *names; - quint8 *dataByte; - qint16 *dataShort; - int *dataInt; - qint16 *randomDataShort; - quint8 *randomDataByte; - int *randomDataInt; + quint32 namesPtr; + quint16 names; + + quint32 dataBytePtr; + quint8 dataByte; + + quint32 dataShortPtr; + qint16 dataShort; + + quint32 dataIntPtr; + int dataInt; + + quint32 randomDataShortPtr; + qint16 randomDataShort; + + quint32 randomDataBytePtr; + quint8 randomDataByte; + + quint32 randomDataIntPtr; + int randomDataInt; XAnimIndices indices; @@ -117,74 +160,14 @@ struct XAnimParts qint32 deltaPartPtr; XAnimDeltaPart deltaPart; }; - -QDataStream& operator<<(QDataStream& out, const XAnimParts& in) { - out.writeRawData(reinterpret_cast(&in.namePtr), 4); - out.writeRawData(reinterpret_cast(&in.dataByteCount), 2); - out.writeRawData(reinterpret_cast(&in.dataShortCount), 2); - out.writeRawData(reinterpret_cast(&in.dataIntCount), 2); - out.writeRawData(reinterpret_cast(&in.randomDataByteCount), 2); - out.writeRawData(reinterpret_cast(&in.randomDataIntCount), 2); - out.writeRawData(reinterpret_cast(&in.numframes), 2); - out.writeRawData(reinterpret_cast(&in.bLoop), 1); - out.writeRawData(reinterpret_cast(&in.bDelta), 1); - - for (int i = 0; i < 12; i++) { - out.writeRawData(reinterpret_cast(&in.boneCount[i]), 1); - } - - out.writeRawData(reinterpret_cast(&in.notifyCount), 1); - out.writeRawData(reinterpret_cast(&in.assetType), 1); - out.writeRawData(reinterpret_cast(&in.pad), 1); - out.writeRawData(reinterpret_cast(&in.randomDataShortCount), 2); - out.writeRawData(reinterpret_cast(&in.indexCount), 2); - out.writeRawData(reinterpret_cast(&in.framerate), 4); - out.writeRawData(reinterpret_cast(&in.frequency), 4); - - return out; -} - -QDataStream& operator>>(QDataStream& in, XAnimParts& out) { - in.readRawData(reinterpret_cast(&out.namePtr), 4); - in.readRawData(reinterpret_cast(&out.dataByteCount), 2); - in.readRawData(reinterpret_cast(&out.dataShortCount), 2); - in.readRawData(reinterpret_cast(&out.dataIntCount), 2); - in.readRawData(reinterpret_cast(&out.randomDataByteCount), 2); - in.readRawData(reinterpret_cast(&out.randomDataIntCount), 2); - in.readRawData(reinterpret_cast(&out.numframes), 2); - in.readRawData(reinterpret_cast(&out.bLoop), 1); - in.readRawData(reinterpret_cast(&out.bDelta), 1); - - for (int i = 0; i < 12; i++) { - in.readRawData(reinterpret_cast(&out.boneCount[i]), 1); - } - - in.readRawData(reinterpret_cast(&out.notifyCount), 1); - in.readRawData(reinterpret_cast(&out.assetType), 1); - in.readRawData(reinterpret_cast(&out.pad), 1); - in.readRawData(reinterpret_cast(&out.randomDataShortCount), 2); - in.readRawData(reinterpret_cast(&out.indexCount), 2); - in.readRawData(reinterpret_cast(&out.framerate), 4); - in.readRawData(reinterpret_cast(&out.frequency), 4); - - return in; -} +QDataStream &operator<<(QDataStream &aDataStream, const XAnimParts &aAnimPartIn); +QDataStream &operator>>(QDataStream &aDataStream, XAnimParts &aAnimPartOut); +QDebug operator<<(QDebug debug, const XAnimParts &xanimParts); +QString XAnimPartsToString(const XAnimParts &xAnimParts); struct Animation { QString name; - std::shared_ptr parts; + XAnimParts animParts; }; -QDataStream& operator<<(QDataStream& out, const Animation& in) { - out << *in.parts; - - return out; -} - -QDataStream& operator>>(QDataStream& in, Animation& out) { - in >> *out.parts; - - return in; -} - #endif // ANIMPARTS_H diff --git a/libs/assets/asset.cpp b/libs/assets/asset.cpp new file mode 100644 index 0000000..be5cbe3 --- /dev/null +++ b/libs/assets/asset.cpp @@ -0,0 +1 @@ +#include "asset.h" diff --git a/libs/assets/assetlist.cpp b/libs/assets/assetlist.cpp new file mode 100644 index 0000000..d97d392 --- /dev/null +++ b/libs/assets/assetlist.cpp @@ -0,0 +1 @@ +#include "assetlist.h" diff --git a/libs/assets/assetlist.h b/libs/assets/assetlist.h index f91a447..4db3074 100644 --- a/libs/assets/assetlist.h +++ b/libs/assets/assetlist.h @@ -2,13 +2,7 @@ #define ASSETLIST_H #include "asset.h" - -struct ScriptStringList -{ - int count; - QVector stringPtrs; - QStringList scriptStrings; -}; +#include "scriptstringlist.h" struct XAssetList { diff --git a/libs/assets/assetmap.h b/libs/assets/assetmap.h new file mode 100644 index 0000000..f0c0fa3 --- /dev/null +++ b/libs/assets/assetmap.h @@ -0,0 +1,60 @@ +#ifndef ASSETMAP_H +#define ASSETMAP_H + +#include "animparts.h" +#include "model.h" +#include "material.h" +#include "materialpixelshader.h" +#include "materialtechset.h" +#include "gfximage.h" +#include "soundalias.h" +#include "soundcurve.h" +#include "loadedsound.h" +#include "clipmap.h" +#include "comworld.h" +#include "gameworld.h" +#include "mapent.h" +#include "gfxworld.h" +#include "gfxlightdef.h" +#include "gfximage.h" +#include "font.h" +#include "menulist.h" +#include "menudef.h" +#include "localizeentry.h" +#include "weapondef.h" +#include "sounddriver.h" +#include "effectdef.h" +#include "effecttable.h" +#include "rawfile.h" +#include "stringtable.h" + +struct AssetMap { + QVector animations; + QVector models; + QVector materials; + QVector pixelShaders; + QVector techSets; + QVector gfxWorlds; + QVector gfxLightDefs; + QVector images; + QVector sounds; + QVector soundCurves; + QVector loadedSounds; + QVector clipMaps; + QVector comWorlds; + QVector gameWorldSPs; + QVector gameWorldMPs; + QVector mapEntities; + QVector fonts; + QVector menuLists; + QVector menuDefinitions; + QVector localizeEntries; + QVector weaponDefinitions; + QVector soundDrivers; + QVector effectDefinitions; + QVector impactTables; + QVector rawFiles; + QVector stringTables; +}; + +#endif // ASSETMAP_H diff --git a/libs/assets/assets.cpp b/libs/assets/assets.cpp index 691d096..db7a958 100644 --- a/libs/assets/assets.cpp +++ b/libs/assets/assets.cpp @@ -1,18 +1,10 @@ #include "assets.h" +#include "Windows.h" -#include -#include -#include +#include -Assets::Assets() - // : mStem() - // , mSize() - // , mTagCount() - // , mTags() - // , mRecordCount() - // , mRecords() - // , mAssetMap() -{ +Assets::Assets(QObject *parent) + : QObject(parent) { } @@ -20,25 +12,9823 @@ Assets::~Assets() { } -Assets::Assets(const Assets &aAssets) { - // mStem = aZoneFile.mStem; - // mSize = aZoneFile.mSize; - // mTagCount = aZoneFile.mTagCount; - // mTags = aZoneFile.mTags; - // mRecordCount = aZoneFile.mRecordCount; - // mRecords = aZoneFile.mRecords; - // mAssetMap = aZoneFile.mAssetMap; + + +QVector Assets::Load_GlyphArray(QDataStream *aStream, int count) +{ + QVector result; + for (int i = 0; i < count; i++) { + Glyph glyph; + + *aStream + >> glyph.letter + >> glyph.x0 + >> glyph.y0 + >> glyph.dx + >> glyph.pixelWidth + >> glyph.pixelHeight + >> glyph.s0 + >> glyph.t0 + >> glyph.s1 + >> glyph.t1; + + result << glyph; + } + return result; } -Assets &Assets::operator=(const Assets &other) { - if (this != &other) { - // mStem = other.mStem; - // mSize = other.mSize; - // mTagCount = other.mTagCount; - // mTags = other.mTags; - // mRecordCount = other.mRecordCount; - // mRecords = other.mRecords; - // mAssetMap = other.mAssetMap; + +// ?Load_GfxLightRegionAxisArray@@YAX_NH@Z at 0x822a49a0 +QVector Assets::Load_GfxLightRegionAxisArray(QDataStream *aStream, int count) +{ + QVector result; + for (int i = 0; i < count; i++) { + GfxLightRegionAxis gfxLightRegionAxis; + + *aStream + >> gfxLightRegionAxis.dir[0] + >> gfxLightRegionAxis.dir[1] + >> gfxLightRegionAxis.dir[2] + >> gfxLightRegionAxis.midPoint + >> gfxLightRegionAxis.halfSize; + + result << gfxLightRegionAxis; } - return *this; + return result; } + + +// ?Load_GfxDrawSurfArray@@YAX_NH@Z at 0x822a49c0 +QVector Assets::Load_GfxDrawSurfArray(QDataStream *aStream, int count) +{ + QVector result; + for (int i = 0; i < count; i++) { + GfxDrawSurf gfxDrawSurf; + + *aStream + >> gfxDrawSurf.packed; + + result << gfxDrawSurf; + } + return result; +} + + +// ?Load_GfxSceneDynBrushArray@@YAX_NH@Z at 0x822a49d8 +QVector Assets::Load_GfxSceneDynBrushArray(QDataStream *aStream, int count) +{ + QVector result; + for (int i = 0; i < count; i++) { + GfxSceneDynBrush gfxSceneDynBrush; + + *aStream + >> gfxSceneDynBrush.info.surfId + >> gfxSceneDynBrush.dynEntId; + + result << gfxSceneDynBrush; + } + return result; +} + + +// ?Load_GfxSceneDynModelArray@@YAX_NH@Z at 0x822a49f0 +QVector Assets::Load_GfxSceneDynModelArray(QDataStream *aStream, int count) +{ + QVector result; + for (int i = 0; i < count; i++) { + GfxSceneDynModel gfxSceneDynModel; + + *aStream + >> gfxSceneDynModel.info.lod + >> gfxSceneDynModel.info.surfId + >> gfxSceneDynModel.dynEntId; + + result << gfxSceneDynModel; + } + return result; +} + + +// ?Load_GfxStreamingAabbTreeArray@@YAX_NH@Z at 0x822a4a10 +QVector Assets::Load_GfxStreamingAabbTreeArray(QDataStream *aStream, int count) +{ + QVector result; + for (int i = 0; i < count; i++) { + GfxStreamingAabbTree gfxStreamingAabbTree; + + *aStream + >> gfxStreamingAabbTree.firstItem + >> gfxStreamingAabbTree.itemCount + >> gfxStreamingAabbTree.firstChild + >> gfxStreamingAabbTree.childCount + >> gfxStreamingAabbTree.mins[0] + >> gfxStreamingAabbTree.mins[1] + >> gfxStreamingAabbTree.mins[2] + >> gfxStreamingAabbTree.maxs[0] + >> gfxStreamingAabbTree.maxs[1] + >> gfxStreamingAabbTree.maxs[2]; + + result << gfxStreamingAabbTree; + } + return result; +} + +GfxLightGridColors Assets::Load_GfxLightGridColors(QDataStream *aStream) +{ + GfxLightGridColors result; + + for (int j = 0; j < 56; j++) { + *aStream + >> result.rgb[j][0] + >> result.rgb[j][1] + >> result.rgb[j][2]; + } + return result; +} + +// ?Load_GfxLightGridColorsArray@@YAX_NH@Z at 0x822a4a28 +QVector Assets::Load_GfxLightGridColorsArray(QDataStream *aStream, int count) +{ + QVector result; + for (int i = 0; i < count; i++) { + result << Load_GfxLightGridColors(aStream); + } + return result; +} + + +// ?Load_GfxLightGridEntryArray@@YAX_NH@Z at 0x822a4a40 +QVector Assets::Load_GfxLightGridEntryArray(QDataStream *aStream, int count) +{ + QVector result; + for (int i = 0; i < count; i++) { + GfxLightGridEntry gfxLightGridEntry; + + for (int j = 0; j < 56; j++) { + *aStream + >> gfxLightGridEntry.colorsIndex + >> gfxLightGridEntry.primaryLightIndex + >> gfxLightGridEntry.needsTrace; + } + + result << gfxLightGridEntry; + } + return result; +} + + +// ?Load_GfxCullGroupArray@@YAX_NH@Z at 0x822a4a58 +QVector Assets::Load_GfxCullGroupArray(QDataStream *aStream, int count) +{ + QVector result; + for (int i = 0; i < count; i++) { + GfxCullGroup gfxCullGroup; + + for (int j = 0; j < 56; j++) { + *aStream + >> gfxCullGroup.mins[0] + >> gfxCullGroup.mins[1] + >> gfxCullGroup.mins[2] + >> gfxCullGroup.maxs[0] + >> gfxCullGroup.maxs[1] + >> gfxCullGroup.maxs[2] + >> gfxCullGroup.surfaceCount + >> gfxCullGroup.startSurfIndex; + } + + result << gfxCullGroup; + } + return result; +} + +typedef unsigned __int16 StaticModelIndex; + +// ?Load_StaticModelIndexArray@@YAX_NH@Z at 0x822a4a70 +QVector Assets::Load_StaticModelIndexArray(QDataStream *aStream, int count) +{ + QVector result; + for (int i = 0; i < count; i++) { + StaticModelIndex staticModelIndex; + + *aStream >> staticModelIndex; + + result << staticModelIndex; + } + return result; +} + + +// ?Load_GfxStaticModelInstArray@@YAX_NH@Z at 0x822a4a88 +QVector Assets::Load_GfxStaticModelInstArray(QDataStream *aStream, int count) +{ + QVector result; + for (int i = 0; i < count; i++) { + GfxStaticModelInst gfxStaticModelInst; + + *aStream + >> gfxStaticModelInst.mins[0] + >> gfxStaticModelInst.mins[1] + >> gfxStaticModelInst.mins[2] + >> gfxStaticModelInst.maxs[0] + >> gfxStaticModelInst.maxs[1] + >> gfxStaticModelInst.maxs[2] + >> gfxStaticModelInst.groundLighting.array[0] + >> gfxStaticModelInst.groundLighting.array[1] + >> gfxStaticModelInst.groundLighting.array[2] + >> gfxStaticModelInst.groundLighting.array[3]; + + result << gfxStaticModelInst; + } + return result; +} + +// ?Load_ItemKeyHandler@@YAX_N@Z at 0x822a5f68 +ItemKeyHandler Assets::Load_ItemKeyHandler(QDataStream *aStream) +{ + ItemKeyHandler itemKeyHandler; + ItemKeyHandler itemKeyHandlerNext; + + ItemKeyHandler **i; // r11 + unsigned __int8 *v2; // r4 + + *aStream + >> itemKeyHandler.key + >> itemKeyHandler.actionPtr + >> itemKeyHandler.nextPtr; + + itemKeyHandler.action = Load_XString(aStream); + + for (ItemKeyHandler i = itemKeyHandler.next; itemKeyHandler.next; i = itemKeyHandler.next ) + { + v2 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + g_streamPos = v2; + itemKeyHandlerNext = (ItemKeyHandler *)v2; + *i = (ItemKeyHandler *)v2; + Load_Stream(1, v2, 0xCu); + itemKeyHandler = itemKeyHandlerNext; + Load_Stream(0, varItemKeyHandlerNext, 0xCu); + varXString = &itemKeyHandler->action; + Load_XString(0); + } +} + +typedef ItemKeyHandler ItemKeyHandlerNext; + +// ?Load_ItemKeyHandlerNext@@YAX_N@Z at 0x822a4aa0 +ItemKeyHandler Assets::Load_ItemKeyHandlerNext(QDataStream *aStream) +{ + ItemKeyHandlerNext result; + + *aStream + >> result.key + >> result.action + >> result.next; + + Load_ItemKeyHandler(aStream); + + return result; +} + +typedef EditFieldDef editFieldDef_t; + +// ?Load_editFieldDef_t@@YAX_N@Z at 0x822a4af0 +EditFieldDef Assets::Load_editFieldDef_t(QDataStream *aStream) +{ + editFieldDef_t result; + + *aStream + >> result.minVal + >> result.maxVal + >> result.defVal + >> result.range + >> result.maxChars + >> result.maxCharsGotoNext + >> result.maxPaintChars + >> result.paintOffset; + + return result; +} + +typedef OperationEnum Operator; + +// ?Load_Operator@@YAX_N@Z at 0x822a4b08 +Operator Assets::Load_Operator(QDataStream *aStream) +{ + Operator result; + + *aStream >> result; + + return result; +} + +typedef unsigned __int16 LeafBrush; + +// ?Load_LeafBrushArray@@YAX_NH@Z at 0x822a4b20 +QVector Assets::Load_LeafBrushArray(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + LeafBrush leafBrush; + + *aStream >> result; + + result << leafBrush; + } + + *aStream >> result; + + return result; +} + + +CLeaf Assets::Load_cLeaf_t(QDataStream *aStream) +{ + CLeaf result; + + *aStream + >> result.firstCollAabbIndex + >> result.collAabbCount + >> result.brushContents + >> result.terrainContents + >> result.mins[0] + >> result.mins[1] + >> result.mins[2] + >> result.maxs[0] + >> result.maxs[1] + >> result.maxs[2] + >> result.leafBrushNode + >> result.cluster; + + + return result; +} + +// ?Load_cmodel_tArray@@YAX_NH@Z at 0x822a4b38 +QVector Assets::Load_cmodel_tArray(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + CModel cmodel; + + *aStream + >> cmodel.mins[0] + >> cmodel.mins[1] + >> cmodel.mins[2] + >> cmodel.maxs[0] + >> cmodel.maxs[1] + >> cmodel.maxs[2] + >> cmodel.radius; + + cmodel.leaf = Load_cLeaf_t(aStream); + + result << cmodel; + } + + return result; +} + + +// ?Load_CollisionAabbTreeArray@@YAX_NH@Z at 0x822a4b58 +QVector Assets::Load_CollisionAabbTreeArray(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + CollisionAabbTree collisionAabbTree; + + *aStream + >> collisionAabbTree.origin[0] + >> collisionAabbTree.origin[1] + >> collisionAabbTree.origin[2] + >> collisionAabbTree.halfSize[0] + >> collisionAabbTree.halfSize[1] + >> collisionAabbTree.halfSize[2] + >> collisionAabbTree.materialIndex + >> collisionAabbTree.childCount + >> collisionAabbTree.u.firstChildIndex + >> collisionAabbTree.u.partitionIndex; + + result << collisionAabbTree; + } + + return result; +} + +// ?Load_CollisionBorder@@YAX_N@Z at 0x822a4b88 +CollisionBorder Assets::Load_CollisionBorder(QDataStream *aStream) +{ + CollisionBorder result; + + *aStream + >> result.distEq[0] + >> result.distEq[1] + >> result.distEq[2] + >> result.zBase + >> result.zSlope + >> result.start + >> result.length; + + return result; +} + +// ?Load_CollisionBorderArray@@YAX_NH@Z at 0x822a4b70 +QVector Assets::Load_CollisionBorderArray(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + result << Load_CollisionBorder(aStream); + } + + return result; +} + +// ?Load_cLeafBrushNodeChildren_t@@YAX_N@Z at 0x822a4ba0 +CLeafBrushNodeChildren Assets::Load_cLeafBrushNodeChildren_t(QDataStream *aStream) +{ + CLeafBrushNodeChildren result; + + *aStream + >> result.dist + >> result.range + >> result.childOffset[0] + >> result.childOffset[1]; + + return result; +} + + +// ?Load_cLeaf_tArray@@YAX_NH@Z at 0x822a4c30 +QVector Assets::Load_cLeaf_tArray(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + result << Load_cLeaf_t(aStream); + } + + return result; +} + + +// ?Load_DynEntityClientArray@@YAX_NH@Z at 0x822a4c48 +QVector Assets::Load_DynEntityClientArray(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + DynEntityClient dynEntityClient; + + *aStream + >> dynEntityClient.physObjId + >> dynEntityClient.flags + >> dynEntityClient.lightingHandle + >> dynEntityClient.health; + + result << dynEntityClient; + } + + return result; +} + + +// ?Load_DynEntityPoseArray@@YAX_NH@Z at 0x822a4c68 +QVector Assets::Load_DynEntityPoseArray(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + DynEntityPose dynEntityPose; + + *aStream + >> dynEntityPose.pose.quat[0] + >> dynEntityPose.pose.quat[1] + >> dynEntityPose.pose.quat[2] + >> dynEntityPose.pose.quat[3] + >> dynEntityPose.pose.origin[0] + >> dynEntityPose.pose.origin[1] + >> dynEntityPose.pose.origin[2] + >> dynEntityPose.radius; + + result << dynEntityPose; + } + + return result; +} + + +// ?Load_DynEntityCollArray@@YAX_NH@Z at 0x822a4c80 +QVector Assets::Load_DynEntityCollArray(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + DynEntityColl dynEntityColl; + + *aStream + >> dynEntityColl.sector + >> dynEntityColl.nextEntInSector + >> dynEntityColl.linkMins[0] + >> dynEntityColl.linkMins[1] + >> dynEntityColl.linkMaxs[0] + >> dynEntityColl.linkMaxs[1]; + + result << dynEntityColl; + } + + return result; +} + + +// ?Load_FxTrailVertexArray@@YAX_NH@Z at 0x822a4ca0 +QVector Assets::Load_FxTrailVertexArray(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + FxTrailVertex fxTrailVertex; + + *aStream + >> fxTrailVertex.pos[0] + >> fxTrailVertex.pos[1] + >> fxTrailVertex.normal[0] + >> fxTrailVertex.normal[1] + >> fxTrailVertex.texCoord; + + result << fxTrailVertex; + } + + return result; +} + + +// ?Load_FxElemVelStateSampleArray@@YAX_NH@Z at 0x822a4cc0 +QVector Assets::Load_FxElemVelStateSampleArray(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + FxElemVelStateSample fxElemVelStateSample; + + *aStream + >> fxElemVelStateSample.local.velocity.base[0] + >> fxElemVelStateSample.local.velocity.base[1] + >> fxElemVelStateSample.local.velocity.base[2] + >> fxElemVelStateSample.local.velocity.amplitude[0] + >> fxElemVelStateSample.local.velocity.amplitude[1] + >> fxElemVelStateSample.local.velocity.amplitude[2] + >> fxElemVelStateSample.local.totalDelta.base[0] + >> fxElemVelStateSample.local.totalDelta.base[1] + >> fxElemVelStateSample.local.totalDelta.base[2] + >> fxElemVelStateSample.local.totalDelta.amplitude[0] + >> fxElemVelStateSample.local.totalDelta.amplitude[1] + >> fxElemVelStateSample.local.totalDelta.amplitude[2] + >> fxElemVelStateSample.world.velocity.base[0] + >> fxElemVelStateSample.world.velocity.base[1] + >> fxElemVelStateSample.world.velocity.base[2] + >> fxElemVelStateSample.world.velocity.amplitude[0] + >> fxElemVelStateSample.world.velocity.amplitude[1] + >> fxElemVelStateSample.world.velocity.amplitude[2] + >> fxElemVelStateSample.world.totalDelta.base[0] + >> fxElemVelStateSample.world.totalDelta.base[1] + >> fxElemVelStateSample.world.totalDelta.base[2] + >> fxElemVelStateSample.world.totalDelta.amplitude[0] + >> fxElemVelStateSample.world.totalDelta.amplitude[1] + >> fxElemVelStateSample.world.totalDelta.amplitude[2]; + + result << fxElemVelStateSample; + } + + return result; +} + +// ?Load_FxElemVisStateSampleArray@@YAX_NH@Z at 0x822a4ce0 +QVector Assets::Load_FxElemVisStateSampleArray(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + FxElemVisStateSample fxElemVisStateSample; + + *aStream + >> fxElemVisStateSample.base.color[0] + >> fxElemVisStateSample.base.color[1] + >> fxElemVisStateSample.base.color[2] + >> fxElemVisStateSample.base.color[3] + >> fxElemVisStateSample.base.rotationDelta + >> fxElemVisStateSample.base.rotationTotal + >> fxElemVisStateSample.base.size[0] + >> fxElemVisStateSample.base.size[1] + >> fxElemVisStateSample.base.scale; + + result << fxElemVisStateSample; + } + + return result; +} + + +// ?Load_pathbasenode_tArray@@YAX_NH@Z at 0x822a4d60 +QVector Assets::Load_pathbasenode_tArray(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + PathBaseNode pathbasenode; + + *aStream + >> pathbasenode.vOrigin[0] + >> pathbasenode.vOrigin[1] + >> pathbasenode.vOrigin[2] + >> pathbasenode.type; + + result << pathbasenode; + } + + return result; +} + +typedef PathLink pathlink_t; + +// ?Load_pathlink_tArray@@YAX_NH@Z at 0x822a4d78 +QVector Assets::Load_pathlink_tArray(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + pathlink_t pathlink; + + *aStream + >> pathlink.fDist + >> pathlink.nodeNum + >> pathlink.disconnectCount + >> pathlink.negotiationLink + >> pathlink.ubBadPlaceCount[0] + >> pathlink.ubBadPlaceCount[1] + >> pathlink.ubBadPlaceCount[2] + >> pathlink.ubBadPlaceCount[3]; + + result << pathlink; + } + + return result; +} + + +// ?Load_XModelHighMipBoundsArray@@YAX_NH@Z at 0x822a4d98 +QVector Assets::Load_XModelHighMipBoundsArray(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + XModelHighMipBounds xModelHighMipBounds; + + *aStream + >> xModelHighMipBounds.mins[0] + >> xModelHighMipBounds.mins[1] + >> xModelHighMipBounds.mins[2] + >> xModelHighMipBounds.maxs[0] + >> xModelHighMipBounds.maxs[1] + >> xModelHighMipBounds.maxs[2]; + + result << xModelHighMipBounds; + } + + return result; +} + +typedef XModelCollSurf XModelCollSurf; + +// ?Load_XModelCollSurf@@YAX_N@Z at 0x822a4db8 +XModelCollSurf Assets::Load_XModelCollSurf(QDataStream *aStream) +{ + XModelCollSurf result; + + *aStream + >> result.mins[0] + >> result.mins[1] + >> result.maxs[2] + >> result.maxs[0] + >> result.maxs[1] + >> result.maxs[2] + >> result.boneIdx + >> result.contents + >> result.surfFlags; + + return result; +} + +typedef unsigned __int8 cbrushedge_t; + +// ?Load_cbrushedge_t@@YAX_N@Z at 0x822a4de8 +cbrushedge_t Assets::Load_cbrushedge_t(QDataStream *aStream) +{ + cbrushedge_t result; + + *aStream >> result; + + return result; +} + +// ?Load_cbrushedge_tArray@@YAX_NH@Z at 0x822a4dd0 +QVector Assets::Load_cbrushedge_tArray(QDataStream *aStream, size_t count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + *aStream >> Load_cbrushedge_t(aStream); + } + + return result; +} + +typedef CPlane cplane_t; + +// ?Load_cplane_t@@YAX_N@Z at 0x822a4e20 +cplane_t Assets::Load_cplane_t(QDataStream *aStream) +{ + cplane_t result; + + *aStream + >> result.normal[0] + >> result.normal[1] + >> result.normal[2] + >> result.dist + >> result.type + >> result.signbits + >> result.pad[0] + >> result.pad[1]; + + return result; +} + +// ?Load_cplane_t@@YAX_N@Z at 0x822a4e20 +CPlane Assets::Load_CPlane(QDataStream *aStream) +{ + CPlane result; + + *aStream + >> result.normal[0] + >> result.normal[1] + >> result.normal[2] + >> result.dist + >> result.type + >> result.signbits + >> result.pad[0] + >> result.pad[1]; + + return result; +} + + +// ?Load_cplane_tArray@@YAX_NH@Z at 0x822a4e00 +QVector Assets::Load_cplane_tArray(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + *aStream >> Load_cplane_t(aStream); + } + + return result; +} + + +// ?Load_MaterialConstantDefArray@@YAX_NH@Z at 0x822a4e38 +QVector Assets::Load_MaterialConstantDefArray(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + MaterialConstantDef materialConstantDef; + + *aStream >> materialConstantDef.nameHash; + + for (int j = 0; j < 12; j++) { + *aStream >> materialConstantDef.name[j]; + } + + for (int j = 0; j < 4; j++) { + *aStream >> materialConstantDef.literal[j]; + } + + *aStream + >> materialConstantDef.literal[0] + >> materialConstantDef.literal[1] + >> materialConstantDef.literal[2] + >> materialConstantDef.literal[3]; + + result << materialConstantDef; + } + + return result; +} + + +// ?Load_GfxStateBitsArray@@YAX_NH@Z at 0x822a4e50 +QVector Assets::Load_GfxStateBitsArray(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + GfxStateBits gfxStateBits; + + *aStream + >> gfxStateBits.loadBits[0] + >> gfxStateBits.loadBits[1]; + + result << gfxStateBits; + } + + return result; +} + + +// ?Load_MaterialArgumentCodeConst@@YAX_N@Z at 0x822a4e68 +MaterialArgumentCodeConst Assets::Load_MaterialArgumentCodeConst(QDataStream *aStream) +{ + MaterialArgumentCodeConst result; + + *aStream + >> result.index + >> result.firstRow + >> result.rowCount; + + return result; +} + + +// ?Load_MaterialVertexDeclaration@@YAX_N@Z at 0x822a4e80 +MaterialVertexDeclaration Assets::Load_MaterialVertexDeclaration(QDataStream *aStream) +{ + MaterialVertexDeclaration result; + + *aStream + >> result.streamCount + >> result.hasOptionalSource; + + for (int i = 0; i < 16; i++) { + + *aStream >> result.routing.data[i].source; + *aStream >> result.routing.data[i].dest; + } + + for (int i = 0; i < 15; i++) { + quint32 declPtr; + *aStream >> declPtr; + &result.routing.decl[i] = declPtr; + } + + return result; +} + +typedef unsigned __int8 byteShader; + +// ?Load_byteShaderArray@@YAX_NH@Z at 0x822a4e98 +QVector Assets::Load_byteShaderArray(QDataStream *aStream, size_t count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + byteShader byteShader_; + + *aStream >> byteShader_; + + result << byteShader_; + } + + return result; +} + +typedef unsigned __int8 byte4; + +// ?Load_byte4Array@@YAX_NH@Z at 0x822a4eb0 +QVector Assets::Load_byte4Array(QDataStream *aStream, size_t count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + byte4 byte4_; + + *aStream >> byte4_; + + result << byte4_; + } + + return result; +} + +typedef GfxTexture GfxRawTexture; + +// ?Load_GfxRawTextureArray@@YAX_NH@Z at 0x822a4ec8 +QVector Assets::Load_GfxRawTextureArray(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + GfxRawTexture gfxRawTexture; + + quint32 basemapPtr, mapPtr, volmapPtr, cubemapPtr, loadDefPtr; + + *aStream + >> basemapPtr + >> mapPtr + >> volmapPtr + >> cubemapPtr + >> loadDefPtr; + + &gfxRawTexture.basemap = basemapPtr; + &gfxRawTexture.map = mapPtr; + &gfxRawTexture.volmap = volmapPtr; + &gfxRawTexture.cubemap = cubemapPtr; + &gfxRawTexture.loadDef = loadDefPtr; + + result << gfxRawTexture; + } + + return result; +} + + +// ?Load_IDirect3DCubeTexture9@@YAX_N@Z at 0x822a4ee0 +D3DCubeTexture Assets::Load_IDirect3DCubeTexture9(QDataStream *aStream) +{ + D3DCubeTexture result; + + *aStream + >> result.MipFlush + >> result.Format + >> result.Common + >> result.ReferenceCount + >> result.Fence + >> result.ReadFence + >> result.Identifier + >> result.BaseFlush; + + for (int i = 0; i < 16; i++) { + + *aStream >> result.routing.data[i].source; + *aStream >> result.routing.data[i].dest; + } + + for (int i = 0; i < 15; i++) { + quint32 declPtr; + *aStream >> declPtr; + &result.routing.decl[i] = declPtr; + } + + return result; +} + + +// ?Load_IDirect3DVolumeTexture9@@YAX_N@Z at 0x822a4ef8 +D3DVolumeTexture Assets::Load_IDirect3DVolumeTexture9(QDataStream *aStream) +{ + D3DVolumeTexture result; + + *aStream + >> result.MipFlush + >> result.Format + >> result.Common + >> result.ReferenceCount + >> result.Fence + >> result.ReadFence + >> result.Identifier + >> result.BaseFlush; + + for (int i = 0; i < 16; i++) { + + *aStream >> result.routing.data[i].source; + *aStream >> result.routing.data[i].dest; + } + + for (int i = 0; i < 15; i++) { + quint32 declPtr; + *aStream >> declPtr; + &result.routing.decl[i] = declPtr; + } + + return result; +} + + +// ?Load_IDirect3DTexture9@@YAX_N@Z at 0x822a4f10 +void Assets::Load_IDirect3DTexture9(QDataStream *aStream) +{ + Load_Stream(1, varIDirect3DTexture9, 0x34u); +} + +typedef unsigned __int16 r_index16_t; + +// ?Load_r_index16_tArray@@YAX_NH@Z at 0x822a4f28 +QVector Assets::Load_r_index16_tArray(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + r_index16_t r_index16; + + *aStream >> r_index16; + + result << r_index16; + } + + return result; +} + +typedef unsigned __int16 r_index_t; + +// ?Load_r_index_tArray@@YAX_NH@Z at 0x822a4f40 +QVector Assets::Load_r_index_tArray(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + r_index_t r_index; + + *aStream >> r_index; + + result << r_index; + } + + return result; +} + +typedef D3DIndexBuffer GfxIndexBuffer; + +// ?Load_GfxIndexBuffer@@YAX_N@Z at 0x822a4f58 +D3DIndexBuffer Assets::Load_GfxIndexBuffer(QDataStream *aStream) +{ + GfxIndexBuffer result; + + *aStream + >> result.Address + >> result.Size + >> result.Common + >> result.ReferenceCount + >> result.Fence + >> result.ReadFence + >> result.Identifier + >> result.BaseFlush; + + return result; +} + +typedef unsigned __int16 XBlendInfo; + +// ?Load_XBlendInfoArray@@YAX_NH@Z at 0x822a4f70 +QVector Assets::Load_XBlendInfoArray(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + XBlendInfo xBlendInfo; + + *aStream >> xBlendInfo; + + result << xBlendInfo; + } + + return result; +} + +typedef D3DVertexBuffer GfxVertexBuffer; + +// ?Load_GfxVertexBuffer@@YAX_N@Z at 0x822a4f88 +GfxVertexBuffer Assets::Load_GfxVertexBuffer(QDataStream *aStream) +{ + GfxVertexBuffer result; + + *aStream + >> result.Format.__s0.Type + >> result.Format.__s0.BaseAddress + >> result.Format.__s0.Endian + >> result.Format.__s0.Size + >> result.Format.__s0.AddressClamp + >> result.Format.__s0. + >> result.Format.__s0.RequestSize + >> result.Format.__s0.ClampDisable + >> result.Format.dword[0] + >> result.Format.dword[1] + >> result.Common + >> result.ReferenceCount + >> result.Fence + >> result.ReadFence + >> result.Identifier + >> result.BaseFlush; + + return result; +} + + +// ?Load_XSurfaceCollisionNodeArray@@YAX_NH@Z at 0x822a4fa0 +QVector Assets::Load_XSurfaceCollisionNodeArray(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + XSurfaceCollisionNode xSurfaceCollisionNode; + + *aStream + >> xSurfaceCollisionNode.aabb.mins[0] + >> xSurfaceCollisionNode.aabb.mins[1] + >> xSurfaceCollisionNode.aabb.mins[2] + >> xSurfaceCollisionNode.aabb.maxs[0] + >> xSurfaceCollisionNode.aabb.maxs[1] + >> xSurfaceCollisionNode.aabb.maxs[2] + >> xSurfaceCollisionNode.childBeginIndex + >> xSurfaceCollisionNode.childCount; + + result << xSurfaceCollisionNode; + } + + return result; +} + +struct XSurfaceCollisionLeaf +{ + unsigned __int16 triangleBeginIndex; +}; + +// ?Load_XSurfaceCollisionLeafArray@@YAX_NH@Z at 0x822a4fb8 +QVector Assets::Load_XSurfaceCollisionLeafArray(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + XSurfaceCollisionLeaf xSurfaceCollisionLeaf; + + *aStream >> xSurfaceCollisionLeaf.triangleBeginIndex; + + result << xSurfaceCollisionLeaf; + } + + return result; +} + + +// ?Load_GfxBrushModelArray@@YAX_NH@Z at 0x822a4fd0 +QVector Assets::Load_GfxBrushModelArray(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + GfxBrushModel gfxBrushModel; + + *aStream + >> gfxBrushModel.writable.mins[0] + >> gfxBrushModel.writable.mins[1] + >> gfxBrushModel.writable.mins[2] + >> gfxBrushModel.writable.maxs[0] + >> gfxBrushModel.writable.maxs[1] + >> gfxBrushModel.writable.maxs[2] + >> gfxBrushModel.bounds[0][0] + >> gfxBrushModel.bounds[0][1] + >> gfxBrushModel.bounds[0][2] + >> gfxBrushModel.bounds[1][0] + >> gfxBrushModel.bounds[1][1] + >> gfxBrushModel.bounds[1][2] + >> gfxBrushModel.surfaceCount + >> gfxBrushModel.startSurfIndex; + + result << gfxBrushModel; + } + + return result; +} + +typedef GfxPackedVertex GfxPackedVertex0; + +// ?Load_GfxPackedVertex0Array@@YAX_NH@Z at 0x822a4fe8 +QVector Assets::Load_GfxPackedVertex0Array(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + GfxPackedVertex0 gfxPackedVertex0; + + *aStream + >> gfxPackedVertex0.xyz[0] + >> gfxPackedVertex0.xyz[1] + >> gfxPackedVertex0.xyz[2] + >> gfxPackedVertex0.binormalSign + >> gfxPackedVertex0.color.array[0] + >> gfxPackedVertex0.color.array[1] + >> gfxPackedVertex0.color.array[2] + >> gfxPackedVertex0.color.array[3] + >> gfxPackedVertex0.texCoord.packed + >> gfxPackedVertex0.normal.packed + >> gfxPackedVertex0.tangent.packed; + + result << gfxPackedVertex0; + } + + return result; +} + +typedef GfxWorldVertex GfxWorldVertex0; + +// ?Load_GfxWorldVertex0Array@@YAX_NH@Z at 0x822a5000 +void Assets::Load_GfxWorldVertex0Array(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + GfxWorldVertex0 gfxWorldVertex0; + + *aStream + >> gfxWorldVertex0.xyz[0] + >> gfxWorldVertex0.xyz[1] + >> gfxWorldVertex0.xyz[2] + >> gfxWorldVertex0.binormalSign + >> gfxWorldVertex0.color.array[0] + >> gfxWorldVertex0.color.array[1] + >> gfxWorldVertex0.color.array[2] + >> gfxWorldVertex0.color.array[3] + >> gfxWorldVertex0.texCoord[0] + >> gfxWorldVertex0.texCoord[1] + >> gfxWorldVertex0.lmapCoord[0] + >> gfxWorldVertex0.lmapCoord[1] + >> gfxWorldVertex0.normal.packed + >> gfxWorldVertex0.tangent.packed; + + result << gfxPackedVertex0; + } + + return result; +} + + +// ?Load_XAUDIOCHANNELMAPENTRYArray@@YAX_NH@Z at 0x822a5018 +QVector Assets::Load_XAUDIOCHANNELMAPENTRYArray(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + XAUDIOCHANNELMAPENTRY xAUDIOCHANNELMAPENTRY; + + *aStream + >> xAUDIOCHANNELMAPENTRY.InputChannel + >> xAUDIOCHANNELMAPENTRY.OutputChannel + >> xAUDIOCHANNELMAPENTRY.Volume; + + result << xAUDIOCHANNELMAPENTRY; + } + + return result; +} + + +// ?Load_StreamFileNamePacked@@YAX_N@Z at 0x822a5030 +StreamFileNamePacked Assets::Load_StreamFileNamePacked(QDataStream *aStream) +{ + StreamFileNamePacked result; + + *aStream + >> result.offset + >> result.length; + + return result; +} + + +// ?Load_XaReverbSettingsArray@@YAX_NH@Z at 0x822a5048 +QVector Assets::Load_XaReverbSettingsArray(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + XaReverbSettings xaReverbSettings; + + *aStream + >> xaReverbSettings.presetOverridden + >> xaReverbSettings.reverbSettings.ReflectionsDelay + >> xaReverbSettings.reverbSettings.ReverbDelay + >> xaReverbSettings.reverbSettings.RearDelay + >> xaReverbSettings.reverbSettings.PositionLeft + >> xaReverbSettings.reverbSettings.PositionRight + >> xaReverbSettings.reverbSettings.PositionMatrixLeft + >> xaReverbSettings.reverbSettings.PositionMatrixRight + >> xaReverbSettings.reverbSettings.EarlyDiffusion + >> xaReverbSettings.reverbSettings.LateDiffusion + >> xaReverbSettings.reverbSettings.LowEQGain + >> xaReverbSettings.reverbSettings.LowEQCutoff + >> xaReverbSettings.reverbSettings.HighEQGain + >> xaReverbSettings.reverbSettings.HighEQCutoff + >> xaReverbSettings.reverbSettings.RoomFilterFreq + >> xaReverbSettings.reverbSettings.RoomFilterMain + >> xaReverbSettings.reverbSettings.RoomFilterHF + >> xaReverbSettings.reverbSettings.ReflectionsGain + >> xaReverbSettings.reverbSettings.ReverbGain + >> xaReverbSettings.reverbSettings.DecayTime + >> xaReverbSettings.reverbSettings.Density + >> xaReverbSettings.reverbSettings.RoomSize; + + result << xaReverbSettings; + } + + return result; +} + +typedef char char2048; + +// ?Load_char2048Array@@YAX_NH@Z at 0x822a5060 +QVector Assets::Load_char2048Array(QDataStream *aStream, size_t count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + char2048 char2048_; + + *aStream >> char2048_; + + result << char2048_; + } + + return result; +} + + +// ?Load_DObjAnimMatArray@@YAX_NH@Z at 0x822a5078 +QVector Assets::Load_DObjAnimMatArray(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + DObjAnimMat dObjAnimMat; + + *aStream + >> dObjAnimMat.quat[0] + >> dObjAnimMat.quat[1] + >> dObjAnimMat.quat[2] + >> dObjAnimMat.quat[3] + >> dObjAnimMat.trans[0] + >> dObjAnimMat.trans[1] + >> dObjAnimMat.trans[2] + >> dObjAnimMat.transWeight; + + result << dObjAnimMat; + } + + return result; +} + + +// ?Load_XBoneInfoArray@@YAX_NH@Z at 0x822a5090 +QVector Assets::Load_XBoneInfoArray(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + XBoneInfo xBoneInfo; + + *aStream + >> xBoneInfo.bounds[0][0] + >> xBoneInfo.bounds[0][1] + >> xBoneInfo.bounds[0][2] + >> xBoneInfo.bounds[1][0] + >> xBoneInfo.bounds[1][1] + >> xBoneInfo.bounds[1][2] + >> xBoneInfo.offset[0] + >> xBoneInfo.offset[1] + >> xBoneInfo.offset[2] + >> xBoneInfo.radiusSquared; + + result << xBoneInfo; + } + + return result; +} + +typedef unsigned __int16 UShortVec[3]; + +// ?Load_UShortVecArray@@YAX_NH@Z at 0x822a50b0 +QVector Assets::Load_UShortVecArray(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + UShortVec uShortVec; + + *aStream + >> uShortVec[0] + >> uShortVec[1] + >> uShortVec[2]; + + result << uShortVec; + } + + return result; +} + +typedef unsigned __int8 ByteVec[3]; + +// ?Load_ByteVecArray@@YAX_NH@Z at 0x822a50d0 +QVector Assets::Load_ByteVecArray(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + ByteVec byteVec; + + *aStream + >> byteVec[0] + >> byteVec[1] + >> byteVec[2]; + + result << byteVec; + } + + return result; +} + + +// ?Load_dmaterial_tArray@@YAX_NH@Z at 0x822a50f0 +QVector Assets::Load_dmaterial_tArray(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + dmaterial_t dmaterial; + + for (int j = 0; j < 64; j++) { + *aStream >> dmaterial.material[j]; + } + + *aStream + >> dmaterial.surfaceFlags + >> dmaterial.contentFlags; + + result << dmaterial; + } + + return result; +} + + +// ?Load_XString@@YAX_N@Z at 0x822a5110 +void Assets::Load_XString(QDataStream *aStream) +{ + const char *v3; // r11 + + qint32 stringPtr; + *aStream >> stringPtr; + + if (stringPtr) + { + if (stringPtr == -1) + { + //Load_XStringCustom(v1); + } + else + { + // Resolve pointer to g_streamBlocks contents + //*varXString = (const char *)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + // + (((unsigned int)(stringPtr - 1) >> 26) & 0x38)))[(stringPtr - 1) & 0x1FFFFFFF]; + } + } +} + +// See if this actually needs to be const char +//typedef const char ConstChar; +typedef QChar ConstChar; + +// ?Load_ConstCharArray@@YAX_NH@Z at 0x822a51b0 +QVector Assets::Load_ConstCharArray(QDataStream *aStream, size_t count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + ConstChar constChar; + + *aStream >> constChar; + + result << constChar; + } + + return result; +} + +typedef unsigned __int16 ScriptString; + +// ?Load_ScriptString@@YAX_N@Z at 0x822a51c8 +ScriptString Assets::Load_ScriptString(QDataStream *aStream) +{ + ScriptString result; + + *aStream >> result; + + return result; + + // Might need to resolve contents to the value in varXAssetList? + //*varScriptString = (unsigned __int16)*(const char **)((char *)varXAssetList->stringList.strings + // + __ROL4__(*varScriptString, 2)); +} + +typedef unsigned __int16 UnsignedShort; + +// ?Load_UnsignedShortArray@@YAX_NH@Z at 0x822a5220 +QVector Assets::Load_UnsignedShortArray(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + UnsignedShort unsignedShort; + + *aStream >> unsignedShort; + + result << unsignedShort; + } + + return result; +} + +struct XQuat2 { + __int16 u[2]; +}; + +// ?Load_XQuat2@@YAX_N@Z at 0x822a5250 +XQuat2 Assets::Load_XQuat2(QDataStream *aStream) +{ + XQuat2 xQuat2; + + *aStream + >> xQuat2.u[0] + >> xQuat2.u[1]; + + return xQuat2; +} + +// ?Load_XQuat2Array@@YAX_NH@Z at 0x822a5238 +QVector Assets::Load_XQuat2Array(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + result << Load_XQuat2(aStream); + } + + return result; +} + + +// ?Load_ushortArray@@YAX_NH@Z at 0x822a5268 +QVector Assets::Load_ushortArray(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + ushort ushort_; + + *aStream >> ushort_; + + result << ushort_; + } + + return result; +} + + +// ?Load_shortArray@@YAX_NH@Z at 0x822a5280 +QVector Assets::Load_shortArray(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + short short_; + + *aStream >> short_; + + result << short_; + } + + return result; +} + +struct vec3_t { + float v[3]; +}; + +// ?Load_vec3_t@@YAX_N@Z at 0x822a52b8 +vec3_t Assets::Load_vec3_t(QDataStream *aStream) +{ + vec3_t result; + + *aStream + >> result.v[0] + >> result.v[1] + >> result.v[2]; + + return result; +} + +// ?Load_vec3_tArray@@YAX_NH@Z at 0x822a5298 +QVector Assets::Load_vec3_tArray(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + result << Load_vec3_t(aStream); + } + + return result; +} + +struct vec2_t { + float v[2]; +}; + +// ?Load_vec2_tArray@@YAX_NH@Z at 0x822a52d0 +QVector Assets::Load_vec2_tArray(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + vec2_t vec2; + + *aStream + >> vec2.v[0] + >> vec2.v[1]; + + result << vec2; + } + + return result; +} + +typedef unsigned __int8 raw_byte16; + +// ?Load_raw_byte16Array@@YAX_NH@Z at 0x822a52e8 +QVector Assets::Load_raw_byte16Array(QDataStream *aStream, size_t count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + raw_byte16 raw_byte16_; + + *aStream >> raw_byte16_; + + result << raw_byte16_; + } + + return result; +} + +typedef unsigned __int8 raw_byte; + +// ?Load_raw_byteArray@@YAX_NH@Z at 0x822a5300 +QVector Assets::Load_raw_byteArray(QDataStream *aStream, size_t count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + raw_byte raw_byte_; + + *aStream >> raw_byte_; + + result << raw_byte_; + } + + return result; +} + +typedef unsigned int raw_uint128; + +// ?Load_raw_uint128Array@@YAX_NH@Z at 0x822a5318 +QVector Assets::Load_raw_uint128Array(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + raw_uint128 raw_uint128_; + + *aStream >> raw_uint128_; + + result << raw_uint128_; + } + + return result; +} + +typedef unsigned int raw_uint; + +// ?Load_raw_uintArray@@YAX_NH@Z at 0x822a5330 +QVector Assets::Load_raw_uintArray(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + raw_uint raw_uint_; + + *aStream >> raw_uint_; + + result << raw_uint_; + } + + return result; +} + + +// ?Load_float@@YAX_N@Z at 0x822a5360 +float Assets::Load_float(QDataStream *aStream) +{ + float result; + + *aStream >> result; + + return result; +} + + +// ?Load_floatArray@@YAX_NH@Z at 0x822a5348 +QVector Assets::Load_floatArray(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + result << Load_float(aStream); + } + + return result; +} + + +// ?Load_uint@@YAX_N@Z at 0x822a5390 +uint Assets::Load_uint(QDataStream *aStream) +{ + uint result; + + *aStream >> result; + + return result; +} + + +// ?Load_uintArray@@YAX_NH@Z at 0x822a5378 +QVector Assets::Load_uintArray(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + result << Load_uint(aStream); + } + + return result; +} + + +// ?Load_DWORDArray@@YAX_NH@Z at 0x822a53a8 +QVector Assets::Load_DWORDArray(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + DWORD DWORD_; + + *aStream >> DWORD_; + + result << DWORD_; + } + + return result; +} + +typedef unsigned __int8 byte4096; + +// ?Load_byte4096Array@@YAX_NH@Z at 0x822a53c0 +QVector Assets::Load_byte4096Array(QDataStream *aStream, size_t count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + byte4096 byte4096_; + + *aStream >> byte4096_; + + result << byte4096_; + } + + return result; +} + + +// ?Load_int@@YAX_N@Z at 0x822a53f0 +int Assets::Load_int(QDataStream *aStream) +{ + int result; + + *aStream >> result; + + return result; +} + + +// ?Load_intArray@@YAX_NH@Z at 0x822a53d8 +QVector Assets::Load_intArray(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + result << Load_int(aStream); + } + + return result; +} + + +// ?Load_char@@YAX_N@Z at 0x822a5420 +char Assets::Load_char(QDataStream *aStream) +{ + char result; + + *aStream >> result; + + return result; +} + + +// ?Load_charArray@@YAX_NH@Z at 0x822a5408 +QVector Assets::Load_charArray(QDataStream *aStream, size_t count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + result << Load_char(aStream); + } + + return result; +} + + +// ?Load_byteArray@@YAX_NH@Z at 0x822a5438 +QVector Assets::Load_byteArray(QDataStream *aStream, size_t count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + byte byte_; + + *aStream >> byte_; + + result << byte_; + } + + return result; +} + + +// ?Load_GfxWorldDpvsPlanes@@YAX_N@Z at 0x822a5450 +GfxWorldDpvsPlanes Assets::Load_GfxWorldDpvsPlanes(QDataStream *aStream, GfxWorld aGfxWorld) +{ + GfxWorldDpvsPlanes result; + *aStream + >> result.cellCount + >> result.planesPtr + >> result.nodesPtr + >> result.sceneEntCellBitsPtr; + + if (result.planesPtr) + { + if (result.planesPtr == -1) + { + for (int i = 0; i < aGfxWorld.planeCount; i++) { + gfxWorldDpvsPlanes.planes << Load_cplane_t(aStream); + } + } + else + { + // Resolve to content in g_streamBlocks + //varGfxWorldDpvsPlanes->planes = (cplane_s *)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + // + (((unsigned int)&varGfxWorldDpvsPlanes->planes[-1].pad[1] >> 26) & 0x38)))[(int)&varGfxWorldDpvsPlanes->planes[-1].pad[1] & 0x1FFFFFFF]; + } + } + if (result.nodesPtr) + { + for (int i = 0; i < aGfxWorld.nodeCount; i++) { + ushort ushort_; + + *aStream >> ushort_; + + result.nodes << ushort_; + } + } + if (result.sceneEntCellBitsPtr) + { + for (int i = 0; i < (result.cellCount << 10); i++) { + unsigned int uint_; + + *aStream >> uint_; + + result.sceneEntCellBits << uint_; + } + } + return result; +} + + +// ?Load_GfxWorldDpvsDynamic@@YAX_N@Z at 0x822a5580 +GfxWorldDpvsDynamic Assets::Load_GfxWorldDpvsDynamic(QDataStream *aStream, GfxWorld aGfxWorld) +{ + GfxWorldDpvsDynamic result; + *aStream + >> result.dynEntClientWordCount[0] + >> result.dynEntClientWordCount[1] + >> result.dynEntClientCount[0] + >> result.dynEntClientCount[1] + >> result.dynEntCellBitsPtrs[0] + >> result.dynEntCellBitsPtrs[1] + >> result.dynEntVisDataPtrs[0][0] + >> result.dynEntVisDataPtrs[0][1] + >> result.dynEntVisDataPtrs[0][2] + >> result.dynEntVisDataPtrs[1][0] + >> result.dynEntVisDataPtrs[1][1] + >> result.dynEntVisDataPtrs[1][2]; + + + if (result.dynEntCellBitsPtrs[0]) + { + //for (int i = 0; i < aGfxWorld.dpvsPlanes.cellCount * gfxWorldDpvsDynamic.dynEntClientWordCount[0]; i++) { + *aStream >> result.dynEntCellBits[0]; + //} + } + if (result.dynEntCellBitsPtrs[1]) + { + //for (int i = 0; i < aGfxWorld.dpvsPlanes.cellCount * gfxWorldDpvsDynamic.dynEntClientWordCount[0]; i++) { + *aStream >> result.dynEntCellBits[1]; + //} + } + if (result.dynEntVisDataPtrs[0][0]) + { + //for (int i = 0; i < gfxWorldDpvsDynamic.dynEntClientWordCount[0]; i++) { + *aStream >> result.dynEntVisData[0][0]; + //} + } + if (result.dynEntVisDataPtrs[1][0]) + { + //for (int i = 0; i < gfxWorldDpvsDynamic.dynEntClientWordCount[1]; i++) { + *aStream >> result.dynEntVisData[1][0]; + //} + } + if (result.dynEntVisDataPtrs[0][1]) + { + //for (int i = 0; i < gfxWorldDpvsDynamic.dynEntClientWordCount[0]; i++) { + *aStream >> result.dynEntVisData[0][1]; + //} + } + if (result.dynEntVisDataPtrs[1][1]) + { + //for (int i = 0; i < gfxWorldDpvsDynamic.dynEntClientWordCount[1]; i++) { + *aStream >> result.dynEntVisData[1][1]; + //} + } + if (result.dynEntVisDataPtrs[0][2]) + { + //for (int i = 0; i < gfxWorldDpvsDynamic.dynEntClientWordCount[0]; i++) { + *aStream >> result.dynEntVisData[0][2]; + //} + } + if (result.dynEntVisDataPtrs[1][2]) + { + //for (int i = 0; i < gfxWorldDpvsDynamic.dynEntClientWordCount[1]; i++) { + *aStream >> result.dynEntVisData[1][2]; + //} + } + return result; +} + + +// ?Load_GfxLightRegionHull@@YAX_N@Z at 0x822a57d0 +GfxLightRegionHull Assets::Load_GfxLightRegionHull(QDataStream *aStream) +{ + unsigned int axisCount; // r11 + unsigned __int8 *v2; // r4 + + GfxLightRegionHull result; + *aStream + >> result.kdopMidPoint[0] + >> result.kdopMidPoint[1] + >> result.kdopMidPoint[2] + >> result.kdopMidPoint[3] + >> result.kdopMidPoint[4] + >> result.kdopMidPoint[5] + >> result.kdopMidPoint[6] + >> result.kdopMidPoint[7] + >> result.kdopMidPoint[8] + >> result.kdopHalfSize[0] + >> result.kdopHalfSize[1] + >> result.kdopHalfSize[2] + >> result.kdopHalfSize[3] + >> result.kdopHalfSize[4] + >> result.kdopHalfSize[5] + >> result.kdopHalfSize[6] + >> result.kdopHalfSize[7] + >> result.kdopHalfSize[8] + >> result.axisCount + >> result.axisPtr; + + if (result.axisPtr) + { + for (int i = 0; i < result.axisCount; i++) { + GfxLightRegionAxis axis; + + *aStream + >> axis.dir[0] + >> axis.dir[1] + >> axis.dir[2] + >> axis.midPoint + >> axis.halfSize; + + result.axis << axis; + } + } + return result; +} + +unsigned __int16 __ROL4__(unsigned __int16 value, unsigned __int16 bits) { + // Ensure that the rotation is within bounds + bits = bits % 32; // In case someone passes a value greater than 31 + + return (value << bits) | (value >> (8 - bits)); +} + +// ?Load_GfxShadowGeometry@@YAX_N@Z at 0x822a5850 +GfxShadowGeometry Assets::Load_GfxShadowGeometry(QDataStream *aStream) +{ + GfxShadowGeometry result; + *aStream + >> result.surfaceCount + >> result.smodelCount + >> result.sortedSurfIndexPtr + >> result.smodelIndexPtr; + + if (result.sortedSurfIndexPtr) + { + for (int i = 0; i < __ROL4__(result.surfaceCount, 1); i++) { + unsigned __int16 surfIndex; + + *aStream >> surfIndex; + + result.sortedSurfIndex << surfIndex; + } + } + if (result.smodelIndexPtr) + { + for (int i = 0; i < __ROL4__(result.smodelCount, 1); i++) { + unsigned __int16 smodelIndex; + + *aStream >> smodelIndex; + + result.smodelIndex << smodelIndex; + } + } + return result; +} + + +// ?Load_GfxWorldStreamInfo@@YAX_N@Z at 0x822a58f0 +GfxWorldStreamInfo Assets::Load_GfxWorldStreamInfo(QDataStream *aStream) +{ + GfxWorldStreamInfo result; + *aStream + >> result.aabbTreeCount + >> result.aabbTreesPtr + >> result.leafRefCount + >> result.leafRefsPtr; + + if (result.aabbTreesPtr) + { + for (int i = 0; i < result.aabbTreeCount; i++) { + GfxStreamingAabbTree aabbTree; + + *aStream + >> aabbTree.firstItem + >> aabbTree.itemCount + >> aabbTree.firstChild + >> aabbTree.childCount + >> aabbTree.mins[0] + >> aabbTree.mins[1] + >> aabbTree.mins[2] + >> aabbTree.maxs[0] + >> aabbTree.maxs[1] + >> aabbTree.maxs[2]; + + result.aabbTrees << aabbTree; + } + } + if (result.leafRefsPtr) + { + for (int i = 0; i < result.leafRefCount; i++) { + int leafRef; + + *aStream >> leafRef; + + result.leafRefs << leafRef; + } + } + return result; +} + + +// ?Load_GfxLightGrid@@YAX_N@Z at 0x822a59b0 +GfxLightGrid Assets::Load_GfxLightGrid(QDataStream *aStream) +{ + GfxLightGrid result; + + *aStream + >> result.hasLightRegions + >> result.sunPrimaryLightIndex + >> result.mins[0] + >> result.mins[1] + >> result.mins[2] + >> result.maxs[0] + >> result.maxs[1] + >> result.maxs[2] + >> result.rowAxis + >> result.colAxis + >> result.rowDataStartPtr + >> result.rawRowDataSize + >> result.rawRowDataPtr + >> result.entryCount + >> result.entriesPtr + >> result.colorCount + >> result.colorsPtr; + + if (result.rowDataStartPtr) + { + for (int i = 0; i < (result.maxs[result.rowAxis] - result.mins[result.rowAxis] + 1); i++) { + unsigned __int16 rowDataStart; + + *aStream >> rowDataStart; + + result.rowDataStart << rowDataStart; + } + } + if (result.rawRowDataPtr) + { + for (int i = 0; i < result.rawRowDataSize; i++) { + unsigned __int16 rawRowData; + + *aStream >> rawRowData; + + result.rawRowData << rawRowData; + } + } + if (result.entriesPtr) + { + for (int i = 0; i < result.entryCount; i++) { + GfxLightGridEntry entry; + + *aStream + >> entry.colorsIndex + >> entry.primaryLightIndex + >> entry.needsTrace; + + result.entries << entry; + } + } + if (result.colorsPtr) + { + for (int i = 0; i < result.colorCount; i++) { + result.colors << Load_GfxLightGridColors(aStream); + } + } +} + + +// ?Load_GfxWorldVertexLayerData@@YAX_N@Z at 0x822a5af8 +GfxWorldVertexLayerData Assets::Load_GfxWorldVertexLayerData(QDataStream *aStream, GfxWorld aGfxWorld) +{ + GfxWorldVertexLayerData result; + + *aStream + >> result.dataPtr + >> result.layerVb.Format.__s0.Type + >> result.layerVb.Format.__s0.BaseAddress + >> result.layerVb.Format.__s0.Endian + >> result.layerVb.Format.__s0.Size + >> result.layerVb.Format.__s0.AddressClamp + //>> result.layerVb.Format.__s0.: 1; + >> result.layerVb.Format.__s0.RequestSize + >> result.layerVb.Format.__s0.ClampDisable + >> result.layerVb.Format.dword[0] + >> result.layerVb.Format.dword[1] + >> result.layerVb.Common + >> result.layerVb.ReferenceCount + >> result.layerVb.Fence + >> result.layerVb.ReadFence + >> result.layerVb.Identifier + >> result.layerVb.BaseFlush; + + if (result.dataPtr) + { + for (int i = 0; i < aGfxWorld.vertexLayerDataSize; i++) { + unsigned __int8 dataPart; + + *aStream >> dataPart; + + result.data << dataPart; + } + } + aStream->skipRawData(0x20); + return result; +} + + +// ?Load_GfxWorldVertexData@@YAX_N@Z at 0x822a5bd0 +GfxWorldVertexData Assets::Load_GfxWorldVertexData(QDataStream *aStream, GfxWorld aGfxWorld) +{ + GfxWorldVertexData *v1; // r11 + GfxWorldVertex *v2; // r4 + unsigned int vertexCount; // r11 + D3DVertexBuffer *p_worldVb; // r31 + GfxWorldVertex *vertices; // r30 + + GfxWorldVertexData result; + *aStream + >> result.verticesPtr + >> result.worldVb.Format.__s0.Type + >> result.worldVb.Format.__s0.BaseAddress + >> result.worldVb.Format.__s0.Endian + >> result.worldVb.Format.__s0.Size + >> result.worldVb.Format.__s0.AddressClamp + //>> result.worldVb.Format.__s0.: 1; + >> result.worldVb.Format.__s0.RequestSize + >> result.worldVb.Format.__s0.ClampDisable + >> result.worldVb.Format.dword[0] + >> result.worldVb.Format.dword[1] + >> result.worldVb.Common + >> result.worldVb.ReferenceCount + >> result.worldVb.Fence + >> result.worldVb.ReadFence + >> result.worldVb.Identifier + >> result.worldVb.BaseFlush; + + if (result.verticesPtr) + { + for (int i = 0; i < aGfxWorld.vertexCount; i++) { + GfxWorldVertex gfxWorldVertex; + + *aStream + >> gfxWorldVertex.xyz[0] + >> gfxWorldVertex.xyz[1] + >> gfxWorldVertex.xyz[2] + >> gfxWorldVertex.binormalSign + >> gfxWorldVertex.color.array[0] + >> gfxWorldVertex.color.array[1] + >> gfxWorldVertex.color.array[2] + >> gfxWorldVertex.color.array[3] + >> gfxWorldVertex.texCoord[0] + >> gfxWorldVertex.texCoord[1] + >> gfxWorldVertex.lmapCoord[0] + >> gfxWorldVertex.lmapCoord[1] + >> gfxWorldVertex.normal.packed + >> gfxWorldVertex.tangent.packed; + + result.vertices << gfxWorldVertex; + } + } + return result; +} + + +// ?Load_GfxAabbTree@@YAX_N@Z at 0x822a5da8 +GfxAabbTree Assets::Load_GfxAabbTree(QDataStream *aStream) +{ + unsigned __int16 *smodelIndexes; // r10 + size_t v2; // r5 + unsigned __int8 *v3; // r4 + + GfxAabbTree result; + *aStream + >> result.mins[0] + >> result.mins[1] + >> result.mins[2] + >> result.maxs[0] + >> result.maxs[1] + >> result.maxs[2] + >> result.childCount + >> result.surfaceCount + >> result.startSurfIndex + >> result.smodelIndexCount + >> result.smodelIndexesPtr + >> result.childrenOffset; + + if (result.smodelIndexesPtr) + { + if (result.smodelIndexesPtr == -1) + { + for (int i = 0; i < result.smodelIndexCount; i++) { + unsigned __int16 smodelIndex; + + *aStream >> smodelIndex; + + result.smodelIndexes << smodelIndex; + } + } + else + { + // Resolve contents from g_streamBlocks + //varGfxAabbTree->smodelIndexes = (unsigned __int16 *)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + // + ((((unsigned int)varGfxAabbTree->smodelIndexes + // - 1) >> 26) & 0x38)))[((int)varGfxAabbTree->smodelIndexes - 1) & 0x1FFFFFFF]; + } + } + return result; +} + + +// ?Load_GfxAabbTreeArray@@YAX_NH@Z at 0x822a75f0 +QVector Assets::Load_GfxAabbTreeArray(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + result << Load_GfxAabbTree(aStream); + } + + return result; +} + + +// ?Load_GfxCell@@YAX_N@Z at 0x822a8af0 +GfxCell Assets::Load_GfxCell(QDataStream *aStream) +{ + GfxCell result; + + *aStream + >> result.mins[0] + >> result.mins[1] + >> result.mins[2] + >> result.maxs[0] + >> result.maxs[1] + >> result.maxs[2] + >> result.aabbTreeCount + >> result.aabbTreePtr + >> result.portalCount + >> result.portalsPtr + >> result.cullGroupCount + >> result.cullGroupsPtr + >> result.reflectionProbeCount + >> result.reflectionProbesPtr; + + if (result.aabbTreePtr) + { + result.aabbTree = Load_GfxAabbTreeArray(aStream, result.aabbTreeCount); + } + if (result.portalsPtr) + { + result.portals = Load_GfxPortalArray(1, result.portalCount); + } + if (result.cullGroupsPtr) + { + v4 = 4 * v1->cullGroupCount; + v5 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + g_streamPos = v5; + varint = (int *)v5; + v1->cullGroups = (int *)v5; + Load_Stream(1, v5, v4); + v1 = varGfxCell; + } + if (result.reflectionProbesPtr) + { + v6 = g_streamPos; + reflectionProbeCount = v1->reflectionProbeCount; + varbyte = g_streamPos; + v1->reflectionProbes = g_streamPos; + Load_Stream(1, v6, reflectionProbeCount); + } +} + + +// ?Load_GfxPortal@@YAX_N@Z at 0x822a5cb8 +GfxPortal Assets::Load_GfxPortal(QDataStream *aStream) +{ + GfxPortal *v1; // r11 + GfxCell *cell; // r10 + int vertexCount; // r10 + unsigned __int8 *v4; // r4 + + GfxPortal result; + *aStream + >> result.writable.isQueued + >> result.writable.isAncestor + >> result.writable.recursionDepth + >> result.writable.hullPointCount + >> result.writable.hullPointPtrs[0] + >> result.writable.hullPointPtrs[1] + >> result.writable.queuedParentPtr + >> result.plane.coeffs[0] + >> result.plane.coeffs[1] + >> result.plane.coeffs[2] + >> result.plane.coeffs[3] + >> result.plane.side[0] + >> result.plane.side[1] + >> result.plane.side[2] + >> result.plane.pad + >> result.cellPtr + >> result.verticesPtr + >> result.vertexCount + >> result.hullAxis[0][0] + >> result.hullAxis[0][1] + >> result.hullAxis[0][2] + >> result.hullAxis[1][0] + >> result.hullAxis[1][1] + >> result.hullAxis[1][2]; + + if (result.cellPtr) + { + if (result.cellPtr == -1) + { + result.cell = Load_GfxCell(aStream); + } + else + { + // Resolve contents to g_streamBlocks + //varGfxPortal->cell = (GfxCell *)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + // + ((((unsigned int)&varGfxPortal->cell[-1].reflectionProbes + // + 3) >> 26) & 0x38)))[((int)&varGfxPortal->cell[-1].reflectionProbes + // + 3) & 0x1FFFFFFF]; + } + } + if (result.verticesPtr) + { + for (int i = 0; i < vertexCount + __ROL4__(vertexCount, 1); i++) { + float vertex; + + *aStream >> vertex; + + result.vertices[i] = vertex; + } + } + + return result; +} + +// ?Load_GfxPortalArray@@YAX_NH@Z at 0x822a7598 +QVector Assets::Load_GfxPortalArray(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + result << Load_GfxPortal(aStream); + } + + return result; +} + +QString Assets::Load_XStringCustom(QDataStream *aStream) { + QString result; + + char stringChar; + + *aStream >> stringChar; + while (stringChar != '\0') { + result += stringChar; + + *aStream >> stringChar; + } + + return result; +} + +QString Assets::Load_XString(QDataStream *aStream) +{ + QString result; + + qint32 stringPtr; + *aStream >> stringPtr; + + if (stringPtr == -1) { + result = Load_XStringCustom(aStream); + } else { + // Resolve to contents in g_streamBlocks + //*varXString = (const char *)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + // + (((unsigned int)(v2 - 1) >> 26) & 0x38)))[(v2 - 1) & 0x1FFFFFFF]; + } + + return result; +} + +// ?Load_RawFile@@YAX_N@Z at 0x822a5e60 +RawFile Assets::Load_RawFile(QDataStream *aStream) +{ + RawFile result; + + *aStream + >> result.namePtr + >> result.len + >> result.bufferPtr; + + result.name = Load_XString(aStream); + if (result.bufferPtr) + { + QByteArray buffer(result.len + 1, Qt::Uninitialized); + aStream->readRawData(buffer.data(), result.len + 1); + result.buffer = QString::fromUtf8(buffer); + } + + return result +} + + +// ?Load_LocalizeEntry@@YAX_N@Z at 0x822a5ef0 +LocalizeEntry Assets::Load_LocalizeEntry(QDataStream *aStream) +{ + LocalizeEntry result; + + *aStream + >> result.valuePtr + >> result.namePtr; + + if (result.valuePtr == -1) { + result.value = Load_XStringCustom(aStream); + } + if (result.namePtr == -1) { + result.name = Load_XStringCustom(aStream); + } + + return result; +} + + +// ?Load_operandInternalDataUnion@@YAX_N@Z at 0x822a6058 +void Assets::Load_operandInternalDataUnion(QDataStream *aStream) +{ + Operand *varOperand = new Operand; + QString varXString; + if ( varOperand->dataType == VAL_STRING ) + { + varXString = (const char **)varoperandInternalDataUnion; + Load_XString(0); + } +} + + +// ?Load_ComPrimaryLight@@YAX_N@Z at 0x822a6098 +ComPrimaryLight Assets::Load_ComPrimaryLight(QDataStream *aStream) +{ + ComPrimaryLight result; + + *aStream + >> result.type + >> result.canUseShadowMap + >> result.exponent + >> result.unused + >> result.color[0] + >> result.color[1] + >> result.color[2] + >> result.dir[0] + >> result.dir[1] + >> result.dir[2] + >> result.origin[0] + >> result.origin[1] + >> result.origin[2] + >> result.radius + >> result.cosHalfFovOuter + >> result.cosHalfFovInner + >> result.cosHalfFovExpanded + >> result.rotationLimit + >> result.translationLimit + >> result.defNamePtr; + + if (result.defNamePtr == -1) { + result.defName = Load_XStringCustom(aStream); + } + + return result; +} + + +// ?Load_CollisionPartition@@YAX_N@Z at 0x822a60e8 +CollisionPartition Assets::Load_CollisionPartition(QDataStream *aStream) +{ + CollisionPartition result; + + *aStream + >> result.triCount + >> result.borderCount + >> result.firstTri + >> result.bordersPtr; + + if (result.bordersPtr) + { + if (result.bordersPtr == -1) + { + result.borders = Load_CollisionBorder(aStream); + } + else + { + // Resolve contents from g_streamBlock + //varCollisionPartition->borders = (CollisionBorder *)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + // + ((((unsigned int)&varCollisionPartition->borders[-1].length + // + 3) >> 26) & 0x38)))[((int)&varCollisionPartition->borders[-1].length + 3) & 0x1FFFFFFF]; + } + } + + return result; +} + +CLeafBrushNodeLeaf Assets::Load_CLeafBrushNodeLeaf(QDataStream *aStream, int leafBrushCount) +{ + CLeafBrushNodeLeaf result; + + *aStream >> result.brushesPtr; + + if (result.brushesPtr) { + if (result.brushesPtr == -1) + { + for (int i = 0; i < leafBrushCount; i++) { + unsigned int brush; + + *aStream >> brush; + + result.brushes << brush; + } + } + else + { + // Resolve contents from g_streamBlocks + //varcLeafBrushNodeLeaf_t->brushes = (unsigned __int16 *)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + // + ((((unsigned int)varcLeafBrushNodeLeaf_t->brushes + // - 1) >> 26) & 0x38)))[((int)varcLeafBrushNodeLeaf_t->brushes - 1) & 0x1FFFFFFF]; + } + } + return result; +} + +// ?Load_CLeafBrushNodeData@@YAX_N@Z at 0x822a61a0 +CLeafBrushNodeData Assets::Load_CLeafBrushNodeData(QDataStream *aStream, int aNodeCount) +{ + CLeafBrushNodeData result; + + if (aNodeCount > 0) + { + result = Load_CLeafBrushNodeLeaf(aStream, aNodeCount); + } + + return result; +} + + +// ?Load_MapEnts@@YAX_N@Z at 0x822a6278 +MapEnts Assets::Load_MapEnts(QDataStream *aStream) +{ + MapEnts results; + + *aStream + >> results.namePtr + >> results.entityStringPtr + >> results.numEntityChars; + + if (results.namePtr == -1) { + results.name = Assets::Load_XString(aStream); + } + + if (results.entityStringPtr) + { + QByteArray entityData(results.numEntityChars, Qt::Uninitialized); + + aStream->readRawData(entityData.data(), results.numEntityChars); + + results.entityString = QString::fromUtf8(entityData); + } + + return results; +} + + +// ?Load_FxTrailDef@@YAX_N@Z at 0x822a6308 +FxTrailDef Assets::Load_FxTrailDef(QDataStream *aStream) +{ + FxTrailDef result; + + *aStream + >> result.scrollTimeMsec + >> result.repeatDist + >> result.splitDist + >> result.vertCount + >> result.vertsPtr + >> result.indCount + >> result.indsPtr; + + + if (result.vertsPtr) + { + for (int i = 0; i < result.vertCount; i++) { + FxTrailVertex fxTrailVertex; + + *aStream + >> fxTrailVertex.pos[0] + >> fxTrailVertex.pos[1] + >> fxTrailVertex.normal[0] + >> fxTrailVertex.normal[1] + >> fxTrailVertex.texCoord; + + result.verts << fxTrailVertex; + } + } + if (result.indsPtr) + { + for (int i = 0; i < result.indCount; i++) { + ushort ind; + + *aStream >> ind; + + result.inds << ind; + } + } + + return result; +} + + +// ?Load_FxEffectDefRef@@YAX_N@Z at 0x822a63d0 +FxEffectDefRef Assets::Load_FxEffectDefRef(QDataStream *aStream) +{ + FxEffectDefRef result; + *aStream >> result.namePtr; + if (result.namePtr == -1) { + Load_XStringCustom(aStream); + } + + //if ( varFxEffectDefRef->handle ) + // v2->handle = (const FxEffectDef *)DB_FindXAssetHeader( + // (XAssetHeader *)0x1A, + // (XAssetType)varFxEffectDefRef->handle, + // v1); + return result; +} + + +// ?Load_GameWorldMp@@YAX_N@Z at 0x822a6430 +GameWorldMp Assets::Load_GameWorldMp(QDataStream *aStream) +{ + GameWorldMp result; + + *aStream >> result.namePtr; + + if (result.namePtr == -1) { + result.name = Load_XStringCustom(aStream); + } + + return result; +} + + +// ?LoadPathNodeTreeArray@@YAX_NH@Z at 0x822a6488 +QVector Assets::LoadPathNodeTreeArray(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + PathNodeTree pathnode_tree; + + *aStream + >> pathnode_tree.axis + >> pathnode_tree.dist + >> pathnode_tree.infoPtr; + + if (pathnode_tree.infoPtr) + { + if (pathnode_tree.infoPtr == -1 ) + { + Load_PathNodeTree(1); + } + else + { + // Resolve contents from g_streamBlocks + //*varpathnode_tree_ptr = (pathnode_tree_t *)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + // + (((unsigned int)(v4 - 1) >> 26) & 0x38)))[(v4 - 1) & 0x1FFFFFFF]; + } + } + + result << pathnode_tree; + } + return result; +} + + +// ?Load_PathNodeTreeNodes@@YAX_N@Z at 0x822a6540 +PathNodeTreeNodes Assets::Load_PathNodeTreeNodes(QDataStream *aStream) +{ + PathNodeTreeNodes result; + + *aStream >> result.nodeCount; + + for (int i = 0; i < result.nodeCount; i++) { + quint16 node; + *aStream >> node; + result.nodes << node; + } + return result; +} + + +// ?Load_PathNodeConstant@@YAX_N@Z at 0x822a65b8 +PathNodeConstant Assets::Load_PathNodeConstant(QDataStream *aStream) +{ + PathNodeConstant result; + + *aStream + >> result.type + >> result.spawnflags + >> result.targetname + >> result.script_linkName + >> result.script_noteworthy + >> result.target + >> result.animscript + >> result.animscriptfunc + >> result.vOrigin[0] + >> result.vOrigin[1] + >> result.vOrigin[2] + >> result.fAngle + >> result.forward[0] + >> result.forward[1] + >> result.fRadius + >> result.minUseDistSq + >> result.wOverlapNode[0] + >> result.wOverlapNode[1] + >> result.wChainId + >> result.wChainDepth + >> result.wChainParent + >> result.totalLinkCount + >> result.wChainId + >> result.LinksPtr; + + // idfk what this does + // Load_Stream(0, varpathnode_constant_t, 0x44u); + // varScriptString = &varpathnode_constant_t->targetname; + // Load_Stream(0, &varpathnode_constant_t->targetname, 2u); + // *varScriptString = (unsigned __int16)*(const char **)((char *)varXAssetList->stringList.strings + // + __ROL4__(*varScriptString, 2)); + // varScriptString = &varpathnode_constant_t->script_linkName; + // Load_Stream(0, &varpathnode_constant_t->script_linkName, 2u); + // *varScriptString = (unsigned __int16)*(const char **)((char *)varXAssetList->stringList.strings + // + __ROL4__(*varScriptString, 2)); + // varScriptString = &varpathnode_constant_t->script_noteworthy; + // Load_Stream(0, &varpathnode_constant_t->script_noteworthy, 2u); + // *varScriptString = (unsigned __int16)*(const char **)((char *)varXAssetList->stringList.strings + // + __ROL4__(*varScriptString, 2)); + // varScriptString = &varpathnode_constant_t->target; + // Load_Stream(0, &varpathnode_constant_t->target, 2u); + // *varScriptString = (unsigned __int16)*(const char **)((char *)varXAssetList->stringList.strings + // + __ROL4__(*varScriptString, 2)); + // varScriptString = &varpathnode_constant_t->animscript; + // Load_Stream(0, &varpathnode_constant_t->animscript, 2u); + // v1 = varpathnode_constant_t; + // *varScriptString = (unsigned __int16)*(const char **)((char *)varXAssetList->stringList.strings + // + __ROL4__(*varScriptString, 2)); + // if (result.LinksPtr) + // { + // totalLinkCount = v1->totalLinkCount; + // v3 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + // v1->Links = (PathLink *)v3; + // g_streamPos = v3; + // varpathlink_t = (pathlink_s *)v3; + // Load_Stream(1, v3, 4 * (totalLinkCount + __ROL4__(totalLinkCount, 1))); + // } +} + + +// ?Load_XModelCollSurfArray@@YAX_NH@Z at 0x822a6780 +QVector Assets::Load_XModelCollSurfArray(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + XModelCollSurf xModelCollSurf_s; + + *aStream + >> xModelCollSurf_s.mins[0] + >> xModelCollSurf_s.mins[1] + >> xModelCollSurf_s.mins[2] + >> xModelCollSurf_s.maxs[0] + >> xModelCollSurf_s.maxs[1] + >> xModelCollSurf_s.maxs[2] + >> xModelCollSurf_s.boneIdx + >> xModelCollSurf_s.contents + >> xModelCollSurf_s.surfFlags; + + result << xModelCollSurf_s; + } + return result; +} + + +// ?Load_PhysPreset@@YAX_N@Z at 0x822a6850 +PhysPreset Assets::Load_PhysPreset(QDataStream *aStream) +{ + PhysPreset result; + + *aStream + >> result.namePtr + >> result.type + >> result.mass + >> result.bounce + >> result.friction + >> result.bulletForceScale + >> result.explosiveForceScale + >> result.sndAliasPrefixPtr + >> result.piecesSpreadFraction + >> result.piecesUpwardVelocity + >> result.tempDefaultToCylinder; + + if (result.namePtr == -1) { + result.name = Load_XStringCustom(aStream); + } + if (result.sndAliasPrefixPtr == -1) { + result.sndAliasPrefix = Load_XStringCustom(aStream); + } + + return result; +} + + +// ?Load_MaterialArgumentDef@@YAX_N@Z at 0x822a68c8 +MaterialArgumentDef Assets::Load_MaterialArgumentDef(QDataStream *aStream, MaterialShaderArgument aArgument) +{ + MaterialArgumentDef result; + + if (aArgument.type == 1 || aArgument.type == 7) + { + if (aArgument.u.codeSampler) + { + if (aArgument.u.codeSampler == -1) + { + //varMaterialArgumentDef->codeSampler = (unsigned int)v3; + //varfloat = (float *)v3; + //Load_Stream(1, v3, 0x10u); + } + else + { + // Resolve contents from g_streamBlocks + //varMaterialArgumentDef->codeSampler = (unsigned int)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + // + (((codeSampler - 1) >> 26) & 0x38)))[(codeSampler - 1) & 0x1FFFFFFF]; + } + } + } + return result; +} + + +// ?Load_GfxPixelShaderLoadDef@@YAX_N@Z at 0x822a6950 +GfxPixelShaderLoadDef Assets::Load_GfxPixelShaderLoadDef(QDataStream *aStream) +{ + GfxPixelShaderLoadDef result; + + *aStream + >> result.cachedPartPtr + >> result.physicalPartPtr + >> result.cachedPartSize + >> result.physicalPartSize; + + if (result.physicalPartPtr) + { + for (int i = 0; i < result.physicalPartSize; i++) { + unsigned __int8 physicalPart; + + *aStream >> physicalPart; + + result.physicalPart << physicalPart; + } + } + if (result.cachedPartPtr) + { + for (int i = 0; i < result.cachedPartSize; i++) { + unsigned __int8 cachedPart; + + *aStream >> cachedPart; + + result.cachedPart << cachedPart; + } + } + + return result; +} + + +// ?Load_GfxVertexShaderLoadDef@@YAX_N@Z at 0x822a69f8 +GfxVertexShaderLoadDef Assets::Load_GfxVertexShaderLoadDef(QDataStream *aStream) +{ + GfxVertexShaderLoadDef result; + + *aStream + >> result.cachedPartPtr + >> result.physicalPartPtr + >> result.cachedPartSize + >> result.physicalPartSize; + + if (result.physicalPartPtr) + { + for (int i = 0; i < result.physicalPartSize; i++) { + unsigned __int8 physicalPart; + + *aStream >> physicalPart; + + result.physicalPart << physicalPart; + } + } + if (result.cachedPartPtr) + { + for (int i = 0; i < result.cachedPartSize; i++) { + unsigned __int8 cachedPart; + + *aStream >> cachedPart; + + result.cachedPart << cachedPart; + } + } + return result; +} + + +// ?Load_GfxImagePixels@@YAX_N@Z at 0x822a6aa0 +QVector Assets::Load_GfxImagePixels(QDataStream *aStream, GfxImage aGfxImage) +{ + QVector result; + + if (aGfxImage.pixelsPtr) + { + aStream->skipRawData(aGfxImage.cardMemory.platform[0]); + } + + return result; +} + + +// ?Load_GfxTexture@@YAX_N@Z at 0x822a6b28 +GfxTexture Assets::Load_GfxTexture(QDataStream *aStream, GfxTexture aGfxTexture, GfxImageLoadDef aGfxImageLoadDef) +{ + unsigned __int8 *v1; // r4 + D3DBaseTexture *basemap; // r11 + unsigned __int8 *v3; // r4 + unsigned __int8 *v4; // r4 + + if ((aGfxImageLoadDef.flags & 4) != 0) + { + if (aGfxTexture.basemap) + { + v1 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + g_streamPos = v1; + varGfxTexture->basemap = (D3DBaseTexture *)v1; + varIDirect3DCubeTexture9 = (D3DCubeTexture *)v1; + Load_Stream(1, v1, 0x34u); + } + } + else + { + basemap = aGfxTexture.basemap; + if ( (aGfxImageLoadDef.flags & 8) != 0 ) + { + if ( basemap ) + { + v3 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + g_streamPos = v3; + aGfxTexture.basemap = (D3DBaseTexture *)v3; + varIDirect3DVolumeTexture9 = (D3DVolumeTexture *)v3; + Load_Stream(1, v3, 0x34u); + } + } + else if ( basemap ) + { + v4 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + g_streamPos = v4; + aGfxTexture.basemap = (D3DBaseTexture *)v4; + varIDirect3DTexture9 = (D3DTexture *)v4; + Load_Stream(1, v4, 0x34u); + } + } +} + + +// ?Load_XSurfaceVertexInfo@@YAX_N@Z at 0x822a6c08 +XSurfaceVertexInfo Assets::Load_XSurfaceVertexInfo(QDataStream *aStream) +{ + unsigned __int16 *vertsBlend; // r10 + int v2; // r10 + int v3; // r9 + int v4; // r8 + int v5; // r6 + unsigned __int8 *v6; // r4 + + XSurfaceVertexInfo result; + + *aStream + >> result.vertCount[0] + >> result.vertCount[1] + >> result.vertCount[2] + >> result.vertCount[3] + >> result.vertsBlendPtr; + + if (result.vertsBlendPtr) + { + if (result.vertsBlendPtr == -1) + { + aStream->skipRawData(2 * (7 * result.vertCount[3] + 5 * result.vertCount[2] + 3 * result.vertCount[1] + result.vertCount[0])); + } + else + { + // Resolve contents from g_streamBlocks + //varXSurfaceVertexInfo->vertsBlend = (unsigned __int16 *)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + // + ((((unsigned int)varXSurfaceVertexInfo->vertsBlend + // - 1) >> 26) & 0x38)))[((int)varXSurfaceVertexInfo->vertsBlend - 1) & 0x1FFFFFFF]; + } + } +} + + +// ?Load_XSurfaceCollisionTree@@YAX_N@Z at 0x822a6d00 +XSurfaceCollisionTree Assets::Load_XSurfaceCollisionTree(QDataStream *aStream) +{ + XSurfaceCollisionTree result; + + *aStream + >> result.trans[0] + >> result.trans[1] + >> result.trans[2] + >> result.scale[0] + >> result.scale[1] + >> result.scale[2] + >> result.nodeCount + >> result.leafCount; + + for (int i = 0; i < result.nodeCount; i++) { + XSurfaceCollisionNode collisionNode; + + *aStream + >> collisionNode.aabb.mins[0] + >> collisionNode.aabb.mins[1] + >> collisionNode.aabb.mins[2] + >> collisionNode.aabb.maxs[0] + >> collisionNode.aabb.maxs[1] + >> collisionNode.aabb.maxs[2] + >> collisionNode.childBeginIndex + >> collisionNode.childCount; + + result.nodes << collisionNode; + } + for (int i = 0; i < result.leafCount; i++) { + XSurfaceCollisionLeaf collisionLeaf; + + *aStream >> collisionLeaf.triangleBeginIndex; + + result.leafs << collisionLeaf; + } + return result; +} + + +// ?Load_MaterialInfo@@YAX_N@Z at 0x822a6dc0 +MaterialInfo Assets::Load_MaterialInfo(QDataStream *aStream) +{ + MaterialInfo result; + + *aStream + >> result.namePtr + >> result.gameFlags + >> result.sortKey + >> result.textureAtlasRowCount + >> result.textureAtlasColumnCount + >> result.drawSurf.objectId + >> result.drawSurf.reflectionProbeIndex + >> result.drawSurf.customIndex + >> result.drawSurf.materialSortedIndex + >> result.drawSurf.prepass + >> result.drawSurf.primaryLightIndex + >> result.drawSurf.surfType + >> result.drawSurf.primarySortKey + >> result.drawSurf.unused + >> result.surfaceTypeBits; + + result.name = Load_XStringCustom(aStream); + + return result; +} + + +// ?Load_XAUDIOCHANNELMAP@@YAX_N@Z at 0x822a6e10 +XAUDIOCHANNELMAP Assets::Load_XAUDIOCHANNELMAP(QDataStream *aStream) +{ + XAUDIOCHANNELMAP result; + + *aStream + >> result.EntryCount + >> result.paEntriesPtr; + + if (result.paEntriesPtr) + { + for (int i = 0; i < result.EntryCount; i++) { + XAUDIOCHANNELMAPENTRY entry; + + *aStream + >> entry.InputChannel + >> entry.OutputChannel + >> entry.Volume; + + result.paEntries << entry; + } + } + return result; +} + + +// ?Load_SndCurve@@YAX_N@Z at 0x822a6e88 +SndCurve Assets::Load_SndCurve(QDataStream *aStream) +{ + SndCurve result; + + *aStream + >> result.filenamePtr + >> result.knotCount; + + for (int i = 0; i < 8; i++) { + *aStream + >> result.knots[i][0] + >> result.knots[i][1]; + } + + if (result.filenamePtr == -1) { + result.filename = Load_XStringCustom(aStream); + } + return result; +} + + +// ?Load_StreamFileNameRaw@@YAX_N@Z at 0x822a6ee0 +StreamFileNameRaw Assets::Load_StreamFileNameRaw(QDataStream *aStream) +{ + StreamFileNameRaw result; + + *aStream + >> result.dirPtr + >> result.namePtr; + + if (result.dirPtr == -1) { + result.dir = Load_XStringCustom(aStream); + } + if (result.namePtr == -1) { + result.name = Load_XStringCustom(aStream); + } + + return result; +} + + +// ?Load_SndDriverGlobals@@YAX_N@Z at 0x822a6f48 +SndDriverGlobals Assets::Load_SndDriverGlobals(QDataStream *aStream) +{ + SndDriverGlobals result; + + *aStream + >> result.reverbSettingsPtr + >> result.namePtr; + + if (result.reverbSettingsPtr) + { + XaReverbSettings xaReverbSettings; + + *aStream + >> xaReverbSettings.presetOverridden + >> xaReverbSettings.reverbSettings.ReflectionsDelay + >> xaReverbSettings.reverbSettings.ReverbDelay + >> xaReverbSettings.reverbSettings.RearDelay + >> xaReverbSettings.reverbSettings.PositionLeft + >> xaReverbSettings.reverbSettings.PositionRight + >> xaReverbSettings.reverbSettings.PositionMatrixLeft + >> xaReverbSettings.reverbSettings.PositionMatrixRight + >> xaReverbSettings.reverbSettings.EarlyDiffusion + >> xaReverbSettings.reverbSettings.LateDiffusion + >> xaReverbSettings.reverbSettings.LowEQGain + >> xaReverbSettings.reverbSettings.LowEQCutoff + >> xaReverbSettings.reverbSettings.HighEQGain + >> xaReverbSettings.reverbSettings.HighEQCutoff + >> xaReverbSettings.reverbSettings.RoomFilterFreq + >> xaReverbSettings.reverbSettings.RoomFilterMain + >> xaReverbSettings.reverbSettings.RoomFilterHF + >> xaReverbSettings.reverbSettings.ReflectionsGain + >> xaReverbSettings.reverbSettings.ReverbGain + >> xaReverbSettings.reverbSettings.DecayTime + >> xaReverbSettings.reverbSettings.Density + >> xaReverbSettings.reverbSettings.RoomSize; + + result.reverbSettings = xaReverbSettings; + } + if (result.namePtr == -1) { + result.name = Load_XStringCustom(aStream); + } +} + + +// ?Load_XaSeekTable@@YAX_N@Z at 0x822a6fe0 +XaSeekTable Assets::Load_XaSeekTable(QDataStream *aStream) +{ + XaSeekTable result; + + *aStream + >> result.size + >> result.dataPtr; + + if (result.dataPtr) + { + for (int i = 0; i < result.size; i++) { + unsigned int data; + + *aStream >> data; + + result.data << data; + } + } +} + + +// ?Load_XAUDIOPACKET_ALIGNED@@YAX_N@Z at 0x822a7058 +XAUDIOPACKET_ALIGNED Assets::Load_XAUDIOPACKET_ALIGNED(QDataStream *aStream) +{ + XAUDIOPACKET_ALIGNED result; + + *aStream + >> result.pBufferPtr + >> result.BufferSize + >> result.LoopCount; + + for (int i = 0; i < 6; i++) { + *aStream + >> result.XMALoop[i].LoopStart + >> result.XMALoop[i].LoopEnd + >> result.XMALoop[i].LoopSubframeEnd + >> result.XMALoop[i].LoopSubframeSkip; + } + + *aStream >> result.pContextPtr; + + if (result.pBufferPtr) + { + for (int i = 0; i < result.BufferSize; i++) { + char bufferChar; + + *aStream >> bufferChar; + + result.pBuffer << bufferChar; + } + } + if (result.pContextPtr) + { + *aStream >> result.pContext; + } +} + + +// ?Load_XAnimNotifyInfo@@YAX_N@Z at 0x822a70f8 +XAnimNotifyInfo Assets::Load_XAnimNotifyInfo(QDataStream *aStream) +{ + XAnimNotifyInfo result; + + *aStream + >> result.name + >> result.time; + + // Fill out parsing + aStream->skipRawData(2); + + return result; +} + + +// ?Load_XAnimDynamicFrames@@YAX_N@Z at 0x822a7168 +XAnimDynamicFrames Assets::Load_XAnimDynamicFrames(QDataStream *aStream, + XAnimPartTrans aXAnimPartTrans, + XAnimDynamicIndices aXAnimDynamicIndices, + XAnimDynamicFrames aXAnimDynamicFrames) +{ + XAnimDynamicFrames result; + + if (aXAnimPartTrans.smallTrans) + { + if (aXAnimDynamicIndices._1[0]) // Check this should be [0] + { + int readSize = aXAnimPartTrans.size + 1; + if (aXAnimPartTrans.size == 0) + readSize = 0; + // Fill out parsing + aStream->skipRawData(3 * readSize); + } + } + else if (aXAnimDynamicFrames._1) + { + int readSize = aXAnimPartTrans.size + 1; + if (aXAnimPartTrans.size == 0) + readSize = 0; + // Fill out parsing + aStream->skipRawData(6 * readSize); + } + + return result; +} + + +// ?Load_XAnimDynamicIndicesTrans@@YAX_N@Z at 0x822a7228 +XAnimDynamicIndices Assets::Load_XAnimDynamicIndicesTrans(QDataStream *aStream, + XAnimParts aXAnimParts, + XAnimPartTrans aXAnimPartTrans) +{ + if (aXAnimParts.numframes >= 0x100u) + { + // Fill out parsing + aStream->skipRawData(2 * (aXAnimPartTrans.size + 1)); + } + else + { + // Fill out parsing + aStream->skipRawData(aXAnimPartTrans.size + 1); + } +} + + +// ?Load_XAnimDynamicIndicesDeltaQuat@@YAX_N@Z at 0x822a7278 +XAnimDynamicIndices Assets::Load_XAnimDynamicIndicesDeltaQuat(QDataStream *aStream, + XAnimDeltaPartQuat aXAnimDeltaPartQuat, + XAnimParts aXAnimParts) +{ + XAnimDynamicIndices result; + + if (aXAnimParts.numframes >= 0x100u) + { + // Fill out parsing + aStream->skipRawData(2 * (aXAnimDeltaPartQuat.size + 1)); + } + else + { + // Fill out parsing + aStream->skipRawData(aXAnimDeltaPartQuat.size + 1); + } + + return result; +} + + +// ?Load_XAnimIndices@@YAX_N@Z at 0x822a72c8 +XAnimIndices Assets::Load_XAnimIndices(QDataStream *aStream, + XAnimParts aXAnimParts, + XAnimIndices aXAnimIndices) +{ + XAnimIndices result; + + if (aXAnimParts.numframes >= 0x100u) + { + if (aXAnimIndices._1) + { + // Fill out parsing + aStream->skipRawData(2 * aXAnimParts.indexCount); + } + } + else if (aXAnimIndices._1) + { + // Fill out parsing + aStream->skipRawData(aXAnimParts.indexCount); + } + return result; +} + + +// ?Load_XStringArray@@YAX_NH@Z at 0x822a73b8 +QStringList Assets::Load_XStringArray(QDataStream *aStream, int count) +{ + QStringList result; + + for (int i = 0; i < count; i++) { + result << Load_XString(aStream); + } + + return result; +} + + +// ?Load_ScriptStringArray@@YAX_NH@Z at 0x822a7460 +QVector Assets::Load_ScriptStringArray(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + result << Load_ScriptString(aStream); + } + + return result; +} + + +// ?Load_GfxLightRegionHullArray@@YAX_NH@Z at 0x822a74d8 +QVector Assets::Load_GfxLightRegionHullArray(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + result << Load_GfxLightRegionHull(aStream); + } + + return result; +} + + +// ?Load_GfxShadowGeometryArray@@YAX_NH@Z at 0x822a7538 +QVector Assets::Load_GfxShadowGeometryArray(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + result << Load_GfxShadowGeometry(aStream); + } + + return result; +} + + +// ?Load_StringTable@@YAX_N@Z at 0x822a7650 +StringTable Assets::Load_StringTable(QDataStream *aStream) +{ + StringTable result; + + *aStream + >> result.namePtr + >> result.columnCount + >> result.rowCount + >> result.valuesPtr; + + if (result.namePtr == -1) { + result.name = Load_XStringCustom(aStream); + } + if (result.valuesPtr) + { + result.values = Load_XStringArray(aStream, result.rowCount * result.columnCount); + } + + return result; +} + + +// ?Load_RawFilePtr@@YAX_N@Z at 0x822a76e8 +RawFile Assets::Load_RawFilePtr(QDataStream *aStream) +{ + RawFile result; + qint32 rawFilePtr; + + *aStream >> rawFilePtr; + + if (rawFilePtr) + { + if (rawFilePtr != -1 && rawFilePtr != -2) + { + // Resolve contents from g_streamBlocks + //*varRawFilePtr = *(RawFile **)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + // + (((unsigned int)(v1 - 1) >> 26) & 0x38)))[(v1 - 1) & 0x1FFFFFFF]; + //DB_PopStreamPos(); + return result; + } + result = Load_RawFile(aStream); + } + return result; +} + + +// ?Load_LocalizeEntryPtr@@YAX_N@Z at 0x822a77d0 +LocalizeEntry Assets::Load_LocalizeEntryPtr(QDataStream *aStream) +{ + LocalizeEntry result; + qint32 localizeEntryPtr; + + *aStream >> localizeEntryPtr; + + if (localizeEntryPtr) + { + if (localizeEntryPtr != -1 && localizeEntryPtr != -2) + { + //*varLocalizeEntryPtr = *(LocalizeEntry **)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + // + (((unsigned int)(v1 - 1) >> 26) & 0x38)))[(v1 - 1) & 0x1FFFFFFF]; + //DB_PopStreamPos(); + return result; + } + result = Load_LocalizeEntry(aStream); + } + return result; +} + +// ?Load_MultiDef@@YAX_N@Z at 0x822a78b8 +MultiDef Assets::Load_MultiDef(QDataStream *aStream) +{ + MultiDef result; + + for (int i = 0; i < 32; i++) { + *aStream >> result.dvarListPtrs[i]; + } + for (int i = 0; i < 32; i++) { + *aStream >> result.dvarStrPtrs[i]; + } + for (int i = 0; i < 32; i++) { + *aStream >> result.dvarValue[i]; + } + + *aStream + >> result.count + >> result.strDef; + + for (int i = 0; i < 32; i++) { + if (result.dvarListPtrs[i] == -1) { + result.dvarList << Load_XStringCustom(aStream); + } + } + for (int i = 0; i < 32; i++) { + if (result.dvarStrPtrs[i] == -1) { + result.dvarStr << Load_XStringCustom(aStream); + } + } + + return result; +} + + +// ?Load_Operand@@YAX_N@Z at 0x822a7958 +Operand Assets::Load_Operand(QDataStream *aStream) +{ + Operand result; + + *aStream >> result.dataType; + + if (result.dataType == VAL_STRING) + { + result.stringVal = Load_XString(aStream); + } + else if (result.dataType == VAL_FLOAT) + { + *aStream >> result.floatVal; + } + else if (result.dataType == VAL_INT) + { + *aStream >> result.intVal; + } + + return result; +} + + +// ?Load_ComPrimaryLightArray@@YAX_NH@Z at 0x822a79d0 +QVector Assets::Load_ComPrimaryLightArray(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + ComPrimaryLight comPrimaryLight; + + *aStream + >> comPrimaryLight.type + >> comPrimaryLight.canUseShadowMap + >> comPrimaryLight.exponent + >> comPrimaryLight.unused + >> comPrimaryLight.color[0] + >> comPrimaryLight.color[1] + >> comPrimaryLight.color[2] + >> comPrimaryLight.dir[0] + >> comPrimaryLight.dir[1] + >> comPrimaryLight.dir[2] + >> comPrimaryLight.origin[0] + >> comPrimaryLight.origin[1] + >> comPrimaryLight.origin[2] + >> comPrimaryLight.radius + >> comPrimaryLight.cosHalfFovOuter + >> comPrimaryLight.cosHalfFovInner + >> comPrimaryLight.cosHalfFovExpanded + >> comPrimaryLight.rotationLimit + >> comPrimaryLight.translationLimit + >> comPrimaryLight.defNamePtr; + + result << comPrimaryLight; + } + return result; +} + + +CBrushSide Assets::Load_cbrushside_t(QDataStream *aStream) +{ + CBrushSide result; + + *aStream + >> result.planePtr + >> result.materialNum + >> result.firstAdjacentSideOffset + >> result.edgeCount; + + if (result.planePtr == -1) { + result.plane = Load_CPlane(aStream); + } + + return result; +} + + +// ?Load_CBrush@@YAX_N@Z at 0x822a7a48 +CBrush Assets::Load_CBrush(QDataStream *aStream) +{ + CBrush result; + + *aStream + >> result.mins[0] + >> result.mins[1] + >> result.mins[2] + >> result.contents + >> result.maxs[0] + >> result.maxs[1] + >> result.maxs[2] + >> result.numsides + >> result.sidesPtr + >> result.axialMaterialNum[0][0] + >> result.axialMaterialNum[0][1] + >> result.axialMaterialNum[0][2] + >> result.axialMaterialNum[1][0] + >> result.axialMaterialNum[1][1] + >> result.axialMaterialNum[1][2] + >> result.baseAdjacentSidePtr + >> result.firstAdjacentSideOffsets[0][0] + >> result.firstAdjacentSideOffsets[0][1] + >> result.firstAdjacentSideOffsets[0][2] + >> result.firstAdjacentSideOffsets[1][0] + >> result.firstAdjacentSideOffsets[1][1] + >> result.firstAdjacentSideOffsets[1][2] + >> result.edgeCount[0][0] + >> result.edgeCount[0][1] + >> result.edgeCount[0][2] + >> result.edgeCount[1][0] + >> result.edgeCount[1][1] + >> result.edgeCount[1][2]; + + if (result.sidesPtr) + { + if (result.sidesPtr == -1) + { + for (int i = 0; i < result.numsides; i++) { + result.sides << Load_cbrushside_t(aStream); + } + } + else + { + // Resolve from g_streamBlocks + //varcbrush_t->sides = (cbrushside_t *)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + // + (((unsigned int)(&varcbrush_t->sides[-1].edgeCount + 1) >> 26) & 0x38)))[(int)(&varcbrush_t->sides[-1].edgeCount + 1) & 0x1FFFFFFF]; + } + } + if (result.baseAdjacentSidePtr) + { + if (result.baseAdjacentSidePtr == -1) + { + *aStream >> result.baseAdjacentSide; + } + else + { + // Resolve from g_streamBlocks + //v1->baseAdjacentSide = &(*(unsigned __int8 **)((char *)&g_streamBlocks->data + // + (((unsigned int)(v1->baseAdjacentSide - 1) >> 26) & 0x38)))[(int)(v1->baseAdjacentSide - 1) & 0x1FFFFFFF]; + } + } + + return result; +} + + +// ?Load_CollisionPartitionArray@@YAX_NH@Z at 0x822a7b50 +QVector Assets::Load_CollisionPartitionArray(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + result << Load_CollisionPartition(aStream); + } + + return result; +} + + +// ?Load_CLeafBrushNode@@YAX_N@Z at 0x822a7bb0 +CLeafBrushNode Assets::Load_CLeafBrushNode(QDataStream *aStream) +{ + CLeafBrushNode result; + + *aStream + >> result.axis + >> result.leafBrushCount + >> result.contents + >> result.data; + + result.data = Load_CLeafBrushNodeData(aStream); + + return result; +} + + +// ?Load_cNode_tArray@@YAX_NH@Z at 0x822a7c00 +QVector Assets::Load_cNode_tArray(QDataStream *aStream, int count) +{ + QVector result; + + + for (int i = 0; i < count; i++) { + cNode_t cNode; + + *aStream + >> cNode.planePtr + >> cNode.children[0] + >> cNode.children[1]; + + if (cNode.planePtr) + { + if (cNode.planePtr == -1) + { + cNode.plane = Assets::Load_CPlane(aStream); + } + else + { + // Resolve contents from g_streamBlocks + //varcNode_t->plane = (cplane_s *)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + // + (((unsigned int)&plane[-1].pad[1] >> 26) & 0x38)))[(unsigned int)&plane[-1].pad[1] & 0x1FFFFFFF]; + } + } + + result << cNode; + } + + return result; +} + + +// ?Load_MapEntsPtr@@YAX_N@Z at 0x822a7cc8 +void Assets::Load_MapEntsPtr(QDataStream *aStream) +{ + int v1; // r11 + bool v2; // cr58 + unsigned __int8 *v3; // r11 + const void **inserted; // r30 + MapEnts **v5; // r31 + XAssetHeader *v6; // r5 + + Load_Stream(0, varMapEntsPtr, 4u); + DB_PushStreamPos(0); + v1 = (int)*varMapEntsPtr; + if ( *varMapEntsPtr ) + { + if ( v1 != -1 && v1 != -2 ) + { + *varMapEntsPtr = *(MapEnts **)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + + (((unsigned int)(v1 - 1) >> 26) & 0x38)))[(v1 - 1) & 0x1FFFFFFF]; + DB_PopStreamPos(); + return; + } + v2 = v1 == -2; + v3 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + g_streamPos = v3; + *varMapEntsPtr = (MapEnts *)v3; + varMapEnts = (MapEnts *)v3; + if ( v2 ) + inserted = DB_InsertPointer(); + else + inserted = 0; + Load_MapEnts(1); + v5 = varMapEntsPtr; + *v5 = (MapEnts *)DB_AddXAsset((XAssetHeader *)0x10, (XAssetHeader *)*varMapEntsPtr, v6); + if ( inserted ) + *inserted = *varMapEntsPtr; + } + DB_PopStreamPos(); +} + + +// ?Load_GameWorldMpPtr@@YAX_N@Z at 0x822a7db0 +void Assets::Load_GameWorldMpPtr(QDataStream *aStream) +{ + int v1; // r11 + bool v2; // cr58 + unsigned __int8 *v3; // r11 + const void **inserted; // r30 + GameWorldMp **v5; // r31 + XAssetHeader *v6; // r5 + + Load_Stream(0, varGameWorldMpPtr, 4u); + DB_PushStreamPos(0); + v1 = (int)*varGameWorldMpPtr; + if ( *varGameWorldMpPtr ) + { + if ( v1 != -1 && v1 != -2 ) + { + *varGameWorldMpPtr = *(GameWorldMp **)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + + (((unsigned int)(v1 - 1) >> 26) & 0x38)))[(v1 - 1) & 0x1FFFFFFF]; + DB_PopStreamPos(); + return; + } + v2 = v1 == -2; + v3 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + g_streamPos = v3; + *varGameWorldMpPtr = (GameWorldMp *)v3; + varGameWorldMp = (GameWorldMp *)v3; + if ( v2 ) + inserted = DB_InsertPointer(); + else + inserted = 0; + Load_GameWorldMp(1); + v5 = varGameWorldMpPtr; + *v5 = (GameWorldMp *)DB_AddXAsset((XAssetHeader *)0xF, (XAssetHeader *)*varGameWorldMpPtr, v6); + if ( inserted ) + *inserted = *varGameWorldMpPtr; + } + DB_PopStreamPos(); +} + + +// ?Load_pathnode_tree_info_t@@YAX_N@Z at 0x822a7e98 +void Assets::Load_pathnode_tree_info_t(QDataStream *aStream) +{ + if ( varpathnode_tree_t->axis < 0 ) + { + varpathnode_tree_nodes_t = (PathNodeTreeNodes *)varpathnode_tree_info_t; + Load_PathNodeTreeNodes(0); + } + else + { + varpathnode_tree_ptr = (pathnode_tree_t **)varpathnode_tree_info_t; + LoadPathNodeTreeArray(0, 2); + } +} + + +// ?Load_pathnode_t@@YAX_N@Z at 0x822a7ed8 +void Assets::Load_pathnode_t(QDataStream *aStream) +{ + Load_Stream(0, varpathnode_t, 0x80u); + varpathnode_constant_t = &varpathnode_t->constant; + Load_PathNodeConstant(0); +} + + +// ?Load_cbrushside_tArray@@YAX_NH@Z at 0x822a7f28 +void Assets::Load_cbrushside_tArray(QDataStream *aStream, int count) +{ + int v2; // r31 + CBrushSide *v3; // r30 + CPlane *plane; // r11 + unsigned __int8 *v5; // r4 + + v2 = count; + Load_Stream(1, varcbrushside_t, 12 * count); + v3 = varcbrushside_t; + if ( v2 > 0 ) + { + do + { + varcbrushside_t = v3; + Load_Stream(0, v3, 0xCu); + plane = varcbrushside_t->plane; + if ( varcbrushside_t->plane ) + { + if ( plane == (CPlane *)-1 ) + { + v5 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + g_streamPos = v5; + varcplane_t = (cplane_s *)v5; + varcbrushside_t->plane = (cplane_s *)v5; + Load_Stream(1, v5, 0x14u); + } + else + { + varcbrushside_t->plane = (cplane_s *)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + + (((unsigned int)&plane[-1].pad[1] >> 26) & 0x38)))[(unsigned int)&plane[-1].pad[1] & 0x1FFFFFFF]; + } + } + --v2; + ++v3; + } + while ( v2 ); + } +} + + +// ?Load_PhysPresetPtr@@YAX_N@Z at 0x822a7ff8 +void Assets::Load_PhysPresetPtr(QDataStream *aStream) +{ + int v1; // r11 + bool v2; // cr58 + unsigned __int8 *v3; // r11 + const void **inserted; // r30 + PhysPreset **v5; // r31 + XAssetHeader *v6; // r5 + + Load_Stream(0, varPhysPresetPtr, 4u); + DB_PushStreamPos(0); + v1 = (int)*varPhysPresetPtr; + if ( *varPhysPresetPtr ) + { + if ( v1 != -1 && v1 != -2 ) + { + *varPhysPresetPtr = *(PhysPreset **)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + + (((unsigned int)(v1 - 1) >> 26) & 0x38)))[(v1 - 1) & 0x1FFFFFFF]; + DB_PopStreamPos(); + return; + } + v2 = v1 == -2; + v3 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + g_streamPos = v3; + *varPhysPresetPtr = (PhysPreset *)v3; + varPhysPreset = (PhysPreset *)v3; + if ( v2 ) + inserted = DB_InsertPointer(); + else + inserted = 0; + Load_PhysPreset(1); + v5 = varPhysPresetPtr; + *v5 = (PhysPreset *)DB_AddXAsset((XAssetHeader *)1, (XAssetHeader *)*varPhysPresetPtr, v6); + if ( inserted ) + *inserted = *varPhysPresetPtr; + } + DB_PopStreamPos(); +} + + +// ?Load_MaterialShaderArgument@@YAX_N@Z at 0x822a80e0 +MaterialShaderArgument Assets::Load_MaterialShaderArgument(QDataStream *aStream) +{ + MaterialShaderArgument result; + + *aStream + >> result.type + >> result.dest; + + result.u = Assets::Load_MaterialArgumentDef(aStream, result); +} + + +// ?Load_MaterialPixelShaderProgram@@YAX_N@Z at 0x822a8130 +MaterialPixelShaderProgram Assets::Load_MaterialPixelShaderProgram(QDataStream *aStream) +{ + MaterialPixelShaderProgram result; + + *aStream >> result.psPtr; + + result.loadDef = Load_GfxPixelShaderLoadDef(aStream); + + if ( varMaterialPixelShader->prog.loadDef.physicalPartSize ) + { + ps = varMaterialPixelShader->prog.ps; + HIDWORD(v2) = varMaterialPixelShader->prog.loadDef.physicalPart; + LODWORD(v2) = 0; + *(_QWORD *)&ps->Common = v2; + *(_QWORD *)&ps->Fence = v2; + *(_QWORD *)&ps->Identifier = v2; + *(_QWORD *)&ps[1].Common = v2; + *(_QWORD *)&ps[1].Fence = v2; + ps->Common = 7; + ps->ReferenceCount = 1; + ps->BaseFlush = -65536; + ps[1].Common = HIDWORD(v2); + } + else + { + varMaterialPixelShader->prog.ps = 0; + } + + return result; +} + + +// ?Load_MaterialVertexShaderProgram@@YAX_N@Z at 0x822a81e8 +void Assets::Load_MaterialVertexShaderProgram(QDataStream *aStream) +{ + Load_Stream(0, varMaterialVertexShaderProgram, 0xCu); + varGfxVertexShaderLoadDef = (GfxVertexShaderLoadDef *)varMaterialVertexShaderProgram; + Load_GfxVertexShaderLoadDef(0); + XGRegisterVertexShader( + varMaterialVertexShader->prog.vs, + (unsigned int)varMaterialVertexShader->prog.loadDef.physicalPart); +} + + +// ?Load_GfxImageLoadDef@@YAX_N@Z at 0x822a8248 +GfxImageLoadDef Assets::Load_GfxImageLoadDef(QDataStream *aStream) +{ + GfxImageLoadDef result; + + *aStream + >> result.levelCount + >> result.flags + >> result.dimensions[0] + >> result.dimensions[1] + >> result.dimensions[2] + >> result.format; + + result.texture = Assets::Load_GfxTexture(aStream); + + return result; +} + +typedef GfxTexture GfxTextureLoad; + +// ?Load_GfxTextureLoad@@YAX_N@Z at 0x822a82a8 +GfxTextureLoad Assets::Load_GfxTextureLoad(QDataStream *aStream) +{ + GfxTextureLoad result; + + *aStream >> result.basemapPtr; + + if (result.basemapPtr) + { + if (result.basemapPtr == -1 || result.basemapPtr == -2) + { + result.loadDef = Assets::Load_GfxImageLoadDef(aStream); + } + else + { + // Resolve contents from g_streamBlocks + //varGfxTextureLoad->basemap = *(D3DBaseTexture **)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + // + ((((unsigned int)&basemap[-1].Format.dword[5] + // + 3) >> 26) & 0x38)))[((unsigned int)&basemap[-1].Format.dword[5] + 3) & 0x1FFFFFFF]; + } + } + + return result; +} + + +// ?Load_XRigidVertList@@YAX_N@Z at 0x822a83a0 +XRigidVertList Assets::Load_XRigidVertList(QDataStream *aStream) +{ + XRigidVertList result; + + *aStream + >> result.boneOffset + >> result.vertCount + >> result.triOffset + >> result.triCount + >> result.collisionTreePtr; + + if (result.collisionTreePtr) + { + if (result.collisionTreePtr == -1) + { + result.collisionTree = Assets::Load_XSurfaceCollisionTree(aStream); + } + else + { + // Resolve contents from g_streamBlocks + //varXRigidVertList->collisionTree = (XSurfaceCollisionTree *)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + // + ((((unsigned int)&varXRigidVertList->collisionTree[-1].leafs + // + 3) >> 26) & 0x38)))[((int)&varXRigidVertList->collisionTree[-1].leafs + 3) & 0x1FFFFFFF]; + } + } +} + + +// ?Load_snd_alias_list_name@@YAX_N@Z at 0x822a8450 +void Assets::Load_snd_alias_list_name(QDataStream *aStream) +{ + Load_Stream(0, varsnd_alias_list_name, 4u); + Load_SndAliasCustom(varsnd_alias_list_name); +} + + +// ?Load_XAUDIOCHANNELMAPArray@@YAX_NH@Z at 0x822a8490 +QVector Assets::Load_XAUDIOCHANNELMAPArray(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + result << Assets::Load_XAUDIOCHANNELMAP(aStream); + } + + return result; +} + + +// ?Load_SndCurvePtr@@YAX_N@Z at 0x822a8528 +SndCurve Assets::Load_SndCurvePtr(QDataStream *aStream) +{ + SndCurve result; + qint32 sndCurvePtr; + + *aStream >> sndCurvePtr; + + if (sndCurvePtr) + { + if (sndCurvePtr == -1 || sndCurvePtr == -2) + { + result = Assets::Load_SndCurve(aStream); + } + else { + // Resolve contents from g_streamBlocks + //*varSndCurvePtr = *(SndCurve **)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + // + (((unsigned int)(v1 - 1) >> 26) & 0x38)))[(v1 - 1) & 0x1FFFFFFF]; + } + } + return result; +} + + +// ?Load_StreamFileInfo@@YAX_N@Z at 0x822a8610 +void Assets::Load_StreamFileInfo(QDataStream *aStream) +{ + if ( !varStreamFileName->fileIndex ) + { + varStreamFileNameRaw = &varStreamFileInfo->raw; + Load_StreamFileNameRaw(0); + } +} + + +// ?Load_SndDriverGlobalsPtr@@YAX_N@Z at 0x822a8640 +void Assets::Load_SndDriverGlobalsPtr(QDataStream *aStream) +{ + SndDriverGlobals result; + qint32 sndDriverGlobalsPtr; + + *aStream >> sndDriverGlobalsPtr; + + if (sndDriverGlobalsPtr) + { + if (sndDriverGlobalsPtr == -1 || sndDriverGlobalsPtr == -2) + { + result = Assets::Load_SndDriverGlobals(aStream); + } + else + { + // Resolve contents for g_streamBlocks + //*varSndDriverGlobalsPtr = *(SndDriverGlobals **)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + // + (((unsigned int)(v1 - 1) >> 26) & 0x38)))[(v1 - 1) & 0x1FFFFFFF]; + } + } +} + + +// ?Load_XaSound@@YAX_N@Z at 0x822a8728 +XaSound Assets::Load_XaSound(QDataStream *aStream) +{ + XaSound result; + + *aStream + >> result.packet.pBufferPtr + >> result.packet.BufferSize + >> result.packet.LoopCount; + + for (int i = 0; i < 6; i++) { + *aStream + >> result.packet.XMALoop[i].LoopStart + >> result.packet.XMALoop[i].LoopEnd + >> result.packet.XMALoop[i].LoopSubframeEnd + >> result.packet.XMALoop[i].LoopSubframeSkip; + } + *aStream + >> result.packet.pContextPtr + >> result.packet.pContext + >> result.format.SampleType + >> result.format.___u1.NumStreams + >> result.format.___u1.ChannelCount; + + for (int i = 0; i < 6; i++) { + *aStream + >> result.format.___u2.Stream[i].SampleRate + >> result.format.___u2.Stream[i].ChannelCount + >> result.format.___u2.Stream[i].DecodeBufferSize; + } + *aStream + >> result.packet.pContextPtr + >> result.xaIwXmaDataInfo.totalMsec + >> result.seekTable.size + >> result.seekTable.dataPtr; + + result.packet = Assets::Load_XAUDIOPACKET_ALIGNED(aStream); + result.seekTable = Assets::Load_XaSeekTable(aStream); + + return result; +} + + +// ?Load_XAnimNotifyInfoArray@@YAX_NH@Z at 0x822a8790 +QVector Assets::Load_XAnimNotifyInfoArray(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + XAnimNotifyInfo xAnimNotifyInfo; + + *aStream + >> xAnimNotifyInfo.name + >> xAnimNotifyInfo.time; + + result << xAnimNotifyInfo; + } + return result; +} + +// ?Load_XAnimPartTransFrames@@YAX_N@Z at 0x822a8828 +void Assets::Load_XAnimPartTransFrames(QDataStream *aStream) +{ + unsigned int numframes; // r9 + int size; // r11 + size_t v3; // r5 + + Load_Stream(1, varXAnimPartTransFrames, 0x1Cu); + numframes = varXAnimParts->numframes; + varXAnimDynamicIndicesTrans = &varXAnimPartTransFrames->indices; + size = varXAnimPartTrans->size; + if ( numframes >= 0x100 ) + { + v3 = 2 * (size + 1); + varUnsignedShort = varXAnimPartTransFrames->indices._2; + } + else + { + v3 = size + 1; + varbyte = varXAnimPartTransFrames->indices._1; + } + Load_Stream(1, &varXAnimPartTransFrames->indices, v3); + varXAnimDynamicFrames = &varXAnimPartTransFrames->frames; + Load_XAnimDynamicFrames(0); +} + + +// ?Load_XAnimDeltaPartQuatDataFrames@@YAX_N@Z at 0x822a88d0 +void Assets::Load_XAnimDeltaPartQuatDataFrames(QDataStream *aStream) +{ + unsigned int numframes; // r9 + int size; // r11 + size_t v3; // r5 + unsigned __int8 *v4; // r4 + int v5; // r11 + bool v6; // cr58 + int v7; // r11 + + Load_Stream(1, varXAnimDeltaPartQuatDataFrames, 4u); + numframes = varXAnimParts->numframes; + varXAnimDynamicIndicesDeltaQuat = &varXAnimDeltaPartQuatDataFrames->indices; + size = varXAnimDeltaPartQuat->size; + if ( numframes >= 0x100 ) + { + v3 = 2 * (size + 1); + varUnsignedShort = varXAnimDeltaPartQuatDataFrames->indices._2; + } + else + { + v3 = size + 1; + varbyte = varXAnimDeltaPartQuatDataFrames->indices._1; + } + Load_Stream(1, &varXAnimDeltaPartQuatDataFrames->indices, v3); + if ( varXAnimDeltaPartQuatDataFrames->frames ) + { + v4 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + g_streamPos = v4; + varXAnimDeltaPartQuatDataFrames->frames = (__int16 (*)[2])v4; + varXQuat2 = (__int16 (*)[2])v4; + v5 = varXAnimDeltaPartQuat->size; + v6 = v5 == 0; + v7 = v5 + 1; + if ( v6 ) + v7 = 0; + Load_Stream(1, v4, 4 * v7); + } +} + + +// ?Load_TempStringArray@@YAX_NH@Z at 0x822a89c0 +void Assets::Load_TempStringArray(QDataStream *aStream, int count) +{ + int v2; // r31 + const char **v3; // r30 + const char **v4; // r3 + int v5; // r11 + + v2 = count; + Load_Stream(1, varTempString, 4 * count); + v3 = varTempString; + if ( v2 > 0 ) + { + do + { + varTempString = v3; + Load_Stream(0, v3, 4u); + v4 = varTempString; + v5 = (int)*varTempString; + if ( *varTempString ) + { + if ( v5 == -1 ) + { + varConstChar = (const char *)g_streamPos; + *varTempString = (const char *)g_streamPos; + Load_TempStringCustom(v4); + } + else + { + *varTempString = (const char *)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + + (((unsigned int)(v5 - 1) >> 26) & 0x38)))[(v5 - 1) & 0x1FFFFFFF]; + } + } + --v2; + ++v3; + } + while ( v2 ); + } +} + + +// ?Load_GfxLightRegion@@YAX_N@Z at 0x822a8a78 +GfxLightRegion Assets::Load_GfxLightRegion(QDataStream *aStream) +{ + GfxLightRegion result; + + *aStream + >> result.hullCount + >> result.hullsPtr; + + if (result.hullsPtr) + { + result.hulls << Assets::Load_GfxLightRegionHullArray(aStream, result.hullCount); + } + + return result; +} + + +// ?Load_StringTablePtr@@YAX_N@Z at 0x822a8c10 +StringTable Assets::Load_StringTablePtr(QDataStream *aStream) +{ + StringTable result; + qint32 stringTablePtr; + + *aStream >> stringTablePtr; + + if (stringTablePtr) + { + if (stringTablePtr == -1) + { + result = Assets::Load_StringTable(aStream); + } + else + { + // Resolve contents from g_streamBlocks + //*varStringTablePtr = (StringTable *)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + // + (((unsigned int)(v1 - 1) >> 26) & 0x38)))[(v1 - 1) & 0x1FFFFFFF]; + } + } +} + + +// ?Load_entryInternalData@@YAX_N@Z at 0x822a8d00 +void Assets::Load_entryInternalData(QDataStream *aStream) +{ + if ( varexpressionEntry->type ) + { + varOperand = (Operand *)varentryInternalData; + Load_Operand(0); + } +} + + +// ?Load_ComWorld@@YAX_N@Z at 0x822a8d30 +ComWorld Assets::Load_ComWorld(QDataStream *aStream) +{ + ComWorld result; + + *aStream + >> result.namePtr + >> result.isInUse + >> result.primaryLightCount + >> result.primaryLightsPtr; + + if (result.namePtr) { + result.name = Assets::Load_XStringCustom(aStream); + } + if (result.primaryLightsPtr) + { + result.primaryLights << Assets::Load_ComPrimaryLightArray(aStream, result.primaryLightCount); + } +} + + +// ?Load_cbrush_tArray@@YAX_NH@Z at 0x822a8dc8 +QVector Assets::Load_cbrush_tArray(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + result << Assets::Load_CBrush(aStream); + } + + return result; +} + + +// ?Load_cLeafBrushNode_tArray@@YAX_NH@Z at 0x822a8e28 +QVector Assets::Load_cLeafBrushNode_tArray(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + cLeafBrushNode_t cLeafBrushNode = Assets::Load_CLeafBrushNode(aStream); + Assets::Load_CLeafBrushNode(aStream); + if (cLeafBrushNode.leafBrushCount > 0) { + if (cLeafBrushNode.data.leaf.brushesPtr) { + cLeafBrushNode.data = Assets::Load_CLeafBrushNodeLeaf(count); + } + } + + result << cLeafBrushNode; + } + + return result; +} + + +// ?Load_PathNodeTree@@YAX_N@Z at 0x822a8ed8 +PathNodeTree Assets::Load_PathNodeTree(QDataStream *aStream) +{ + PathNodeTree result; + + *aStream + >> result.axis + >> result.dist + >> result.infoPtr; + + if (result.axis < 0) + { + varpathnode_tree_nodes_t = (PathNodeTreeNodes *)&varpathnode_tree_t->u; + Load_PathNodeTreeNodes(0); + } + else + { + varpathnode_tree_ptr = varpathnode_tree_t->u.child; + LoadPathNodeTreeArray(0, 2); + } +} + + +// ?Load_pathnode_tArray@@YAX_NH@Z at 0x822a8f60 +void Assets::Load_pathnode_tArray(QDataStream *aStream, int count) +{ + int v2; // r30 + pathnode_t *v3; // r31 + + v2 = count; + Load_Stream(1, varpathnode_t, count << 7); + v3 = varpathnode_t; + if ( v2 > 0 ) + { + do + { + varpathnode_t = v3; + Load_Stream(0, v3, 0x80u); + varpathnode_constant_t = &varpathnode_t->constant; + Load_PathNodeConstant(0); + --v2; + ++v3; + } + while ( v2 ); + } +} + + +// ?Load_BrushWrapper@@YAX_N@Z at 0x822a8fd0 +BrushWrapper Assets::Load_BrushWrapper(QDataStream *aStream) +{ + BrushWrapper result; + + *aStream + >> result.mins[0] + >> result.mins[1] + >> result.mins[2] + >> result.contents + >> result.maxs[0] + >> result.maxs[1] + >> result.maxs[2] + >> result.numsides + >> result.sidesPtr + >> result.axialMaterialNum[0][0] + >> result.axialMaterialNum[0][1] + >> result.axialMaterialNum[0][2] + >> result.axialMaterialNum[1][0] + >> result.axialMaterialNum[1][1] + >> result.axialMaterialNum[1][2] + >> result.baseAdjacentSidePtr + >> result.firstAdjacentSideOffsets[0][0] + >> result.firstAdjacentSideOffsets[0][1] + >> result.firstAdjacentSideOffsets[0][2] + >> result.firstAdjacentSideOffsets[1][0] + >> result.firstAdjacentSideOffsets[1][1] + >> result.firstAdjacentSideOffsets[1][2] + >> result.edgeCount[0][0] + >> result.edgeCount[0][1] + >> result.edgeCount[0][2] + >> result.edgeCount[1][0] + >> result.edgeCount[1][1] + >> result.edgeCount[1][2] + >> result.totalEdgeCount + >> result.planesPtr; + + if (result.sidesPtr) + { + result.sides = Assets::Load_cbrushside_tArray(aStream, result.numsides); + } + if (result.baseAdjacentSidePtr) + { + result.baseAdjacentSide = Assets::Load_cbrushedge_t(aStream); + } + if (result.planesPtr) + { + if (result.planesPtr == -1) + { + for (int i = 0; i < result.numsides; i++) { + result.planes << Assets::Load_CPlane(aStream); + } + } + else + { + // Resolve contents from g_streamBlocks + //v1->planes = (cplane_s *)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + // + (((unsigned int)&v1->planes[-1].pad[1] >> 26) & 0x38)))[(int)&v1->planes[-1].pad[1] & 0x1FFFFFFF]; + } + } +} + + +// ?Load_MaterialShaderArgumentArray@@YAX_NH@Z at 0x822a90f0 +void Assets::Load_MaterialShaderArgumentArray(QDataStream *aStream, int count) +{ + int v2; // r30 + MaterialShaderArgument *v3; // r31 + + v2 = count; + Load_Stream(1, varMaterialShaderArgument, 8 * count); + v3 = varMaterialShaderArgument; + if ( v2 > 0 ) + { + do + { + varMaterialShaderArgument = v3; + Load_Stream(0, v3, 8u); + varMaterialArgumentDef = &varMaterialShaderArgument->u; + Load_MaterialArgumentDef(0); + --v2; + ++v3; + } + while ( v2 ); + } +} + + +// ?Load_MaterialPixelShader@@YAX_N@Z at 0x822a9168 +MaterialPixelShader Assets::Load_MaterialPixelShader(QDataStream *aStream) +{ + MaterialPixelShader result; + Load_Stream(1, varMaterialPixelShader, 0x10u); + DB_PushStreamPos(4u); + varXString = &varMaterialPixelShader->name; + Load_XString(0); + varMaterialPixelShaderProgram = &varMaterialPixelShader->prog; + Load_MaterialPixelShaderProgram(0); + + return result; +} + + +// ?Load_MaterialVertexShader@@YAX_N@Z at 0x822a91d8 +void Assets::Load_MaterialVertexShader(QDataStream *aStream) +{ + Load_Stream(1, varMaterialVertexShader, 0x10u); + varXString = &varMaterialVertexShader->name; + Load_XString(0); + varMaterialVertexShaderProgram = &varMaterialVertexShader->prog; + Load_MaterialVertexShaderProgram(0); +} + + +// ?Load_GfxImage@@YAX_N@Z at 0x822a9240 +GfxImage Assets::Load_GfxImage(QDataStream *aStream) +{ + GfxImage result; + + *aStream + >> result.mapType + //>> result.texture.map + >> result.semantic + >> result.cardMemory + >> result.width + >> result.height + >> result.depth + >> result.category + >> result.delayLoadPixels + >> result.pixelsPtr + >> result.baseSize + >> result.streamSlot + >> result.streaming + >> result.namePtr; + + if (result.namePtr == -1) { + result.name = Assets::Load_XStringCustom(aStream); + } + if (result.pixelsPtr) { + result.pixels = Assets::Load_GfxImagePixels(aStream); + } + + result.texture = Assets::Load_GfxTextureLoad(aStream); + + *aStream >> result.texture + + varGfxTextureLoad = &varGfxImage->texture; + Load_GfxTextureLoad(0); + return result; +} + + +// ?Load_XRigidVertListArray@@YAX_NH@Z at 0x822a92d0 +void Assets::Load_XRigidVertListArray(QDataStream *aStream, int count) +{ + int v2; // r31 + XRigidVertList *v3; // r30 + + v2 = count; + Load_Stream(1, varXRigidVertList, 12 * count); + v3 = varXRigidVertList; + if ( v2 > 0 ) + { + do + { + varXRigidVertList = v3; + Load_XRigidVertList(0); + --v2; + ++v3; + } + while ( v2 ); + } +} + + +// ?Load_snd_alias_list_nameArray@@YAX_NH@Z at 0x822a9330 +void Assets::Load_snd_alias_list_nameArray(QDataStream *aStream, int count) +{ + SoundAliasList **v2; // r31 + int v3; // r30 + + Load_Stream(1, varsnd_alias_list_name, 0x74u); + v2 = varsnd_alias_list_name; + v3 = 29; + do + { + varsnd_alias_list_name = v2; + Load_Stream(0, v2, 4u); + Load_SndAliasCustom(varsnd_alias_list_name); + --v3; + ++v2; + } + while ( v3 ); +} + + +// ?Load_SpeakerMapChannel@@YAX_N@Z at 0x822a9390 +void Assets::Load_SpeakerMapChannel(QDataStream *aStream) +{ + Load_Stream(0, varSpeakerMapChannel, 0x10u); + varXAUDIOCHANNELMAP = (XAUDIOCHANNELMAP *)varSpeakerMapChannel; + Load_XAUDIOCHANNELMAPArray(0, 2); +} + + +// ?Load_LoadedSound@@YAX_N@Z at 0x822a93e0 +void Assets::Load_LoadedSound(QDataStream *aStream) +{ + Load_Stream(1, varLoadedSound, 0xA0u); + DB_PushStreamPos(4u); + varXString = &varLoadedSound->name; + Load_XString(0); + varXaSound = &varLoadedSound->sound; + Load_XaSound(0); + DB_PopStreamPos(); +} + + +// ?Load_StreamFileName@@YAX_N@Z at 0x822a9450 +void Assets::Load_StreamFileName(QDataStream *aStream) +{ + unsigned int fileIndex; // r9 + + Load_Stream(0, varStreamFileName, 0xCu); + fileIndex = varStreamFileName->fileIndex; + varStreamFileInfo = &varStreamFileName->info; + if ( !fileIndex ) + { + varStreamFileNameRaw = &varStreamFileName->info.raw; + Load_StreamFileNameRaw(0); + } +} + + +// ?Load_XAnimPartTransData@@YAX_N@Z at 0x822a94b8 +void Assets::Load_XAnimPartTransData(QDataStream *aStream) +{ + if ( varXAnimPartTrans->size ) + { + varXAnimPartTransFrames = &varXAnimPartTransData->frames; + Load_XAnimPartTransFrames(1); + } + else + { + varvec3_t = (float (*)[3])varXAnimPartTransData; + Load_Stream(1, varXAnimPartTransData, 0xCu); + } +} + + +// ?Load_XAnimDeltaPartQuatData@@YAX_N@Z at 0x822a94f8 +void Assets::Load_XAnimDeltaPartQuatData(QDataStream *aStream) +{ + if ( varXAnimDeltaPartQuat->size ) + { + varXAnimDeltaPartQuatDataFrames = &varXAnimDeltaPartQuatData->frames; + Load_XAnimDeltaPartQuatDataFrames(1); + } + else + { + varXQuat2 = (__int16 (*)[2])varXAnimDeltaPartQuatData; + Load_Stream(1, varXAnimDeltaPartQuatData, 4u); + } +} + + +// ?Load_ScriptStringList@@YAX_N@Z at 0x822a9538 +void Assets::Load_ScriptStringList(QDataStream *aStream) +{ + int count; // r4 + unsigned __int8 *v2; // r11 + + Load_Stream(0, varScriptStringList, 8u); + DB_PushStreamPos(4u); + if ( varScriptStringList->strings ) + { + count = varScriptStringList->count; + v2 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + g_streamPos = v2; + varScriptStringList->strings = (const char **)v2; + varTempString = (const char **)v2; + Load_TempStringArray(1, count); + } + DB_PopStreamPos(); +} + + +// ?Load_GfxLightRegionArray@@YAX_NH@Z at 0x822a95b8 +void Assets::Load_GfxLightRegionArray(QDataStream *aStream, int count) +{ + int v2; // r31 + GfxLightRegion *v3; // r29 + unsigned int hullCount; // r4 + + v2 = count; + Load_Stream(1, varGfxLightRegion, 8 * count); + v3 = varGfxLightRegion; + if ( v2 > 0 ) + { + do + { + varGfxLightRegion = v3; + Load_Stream(0, v3, 8u); + if ( varGfxLightRegion->hulls ) + { + hullCount = varGfxLightRegion->hullCount; + g_streamPos = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + varGfxLightRegionHull = (GfxLightRegionHull *)g_streamPos; + varGfxLightRegion->hulls = (GfxLightRegionHull *)g_streamPos; + Load_GfxLightRegionHullArray(1, hullCount); + } + --v2; + ++v3; + } + while ( v2 ); + } +} + + +// ?Load_GfxCellArray@@YAX_NH@Z at 0x822a9650 +void Assets::Load_GfxCellArray(QDataStream *aStream, int count) +{ + int v2; // r31 + GfxCell *v3; // r30 + + v2 = count; + Load_Stream(1, varGfxCell, 56 * count); + v3 = varGfxCell; + if ( v2 > 0 ) + { + do + { + varGfxCell = v3; + Load_GfxCell(0); + --v2; + ++v3; + } + while ( v2 ); + } +} + + +// ?Load_expressionEntry@@YAX_N@Z at 0x822a96a8 +void Assets::Load_expressionEntry(QDataStream *aStream) +{ + int type; // r9 + + Load_Stream(1, varexpressionEntry, 0xCu); + type = varexpressionEntry->type; + varentryInternalData = &varexpressionEntry->data; + if ( type ) + { + varOperand = (Operand *)&varexpressionEntry->data; + Load_Operand(0); + } +} + + +// ?Load_ComWorldPtr@@YAX_N@Z at 0x822a9710 +void Assets::Load_ComWorldPtr(QDataStream *aStream) +{ + int v1; // r11 + bool v2; // cr58 + unsigned __int8 *v3; // r11 + const void **inserted; // r30 + ComWorld **v5; // r31 + XAssetHeader *v6; // r5 + + Load_Stream(0, varComWorldPtr, 4u); + DB_PushStreamPos(0); + v1 = (int)*varComWorldPtr; + if ( *varComWorldPtr ) + { + if ( v1 != -1 && v1 != -2 ) + { + *varComWorldPtr = *(ComWorld **)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + + (((unsigned int)(v1 - 1) >> 26) & 0x38)))[(v1 - 1) & 0x1FFFFFFF]; + DB_PopStreamPos(); + return; + } + v2 = v1 == -2; + v3 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + g_streamPos = v3; + *varComWorldPtr = (ComWorld *)v3; + varComWorld = (ComWorld *)v3; + if ( v2 ) + inserted = DB_InsertPointer(); + else + inserted = 0; + Load_ComWorld(1); + v5 = varComWorldPtr; + *v5 = (ComWorld *)DB_AddXAsset((XAssetHeader *)0xD, (XAssetHeader *)*varComWorldPtr, v6); + if ( inserted ) + *inserted = *varComWorldPtr; + } + DB_PopStreamPos(); +} + + +// ?Load_pathnode_tree_tArray@@YAX_NH@Z at 0x822a97f8 +void Assets::Load_pathnode_tree_tArray(QDataStream *aStream, int count) +{ + int v2; // r31 + PathNodeTree *v3; // r30 + + v2 = count; + Load_Stream(1, varpathnode_tree_t, 16 * count); + v3 = varpathnode_tree_t; + if ( v2 > 0 ) + { + do + { + varpathnode_tree_t = v3; + Load_PathNodeTree(0); + --v2; + ++v3; + } + while ( v2 ); + } +} + + +// ?Load_MaterialPixelShaderPtr@@YAX_N@Z at 0x822a98b0 +void Assets::Load_MaterialPixelShaderPtr(QDataStream *aStream) +{ + int v1; // r11 + bool v2; // cr58 + unsigned __int8 *v3; // r11 + const void **inserted; // r30 + MaterialPixelShader **v5; // r31 + XAssetHeader *v6; // r5 + + Load_Stream(0, varMaterialPixelShaderPtr, 4u); + DB_PushStreamPos(0); + v1 = (int)*varMaterialPixelShaderPtr; + if ( *varMaterialPixelShaderPtr ) + { + if ( v1 != -1 && v1 != -2 ) + { + *varMaterialPixelShaderPtr = *(MaterialPixelShader **)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + + (((unsigned int)(v1 - 1) >> 26) & 0x38)))[(v1 - 1) & 0x1FFFFFFF]; + DB_PopStreamPos(); + return; + } + v2 = v1 == -2; + v3 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + g_streamPos = v3; + *varMaterialPixelShaderPtr = (MaterialPixelShader *)v3; + varMaterialPixelShader = (MaterialPixelShader *)v3; + if ( v2 ) + inserted = DB_InsertPointer(); + else + inserted = 0; + Load_MaterialPixelShader(1); + v5 = varMaterialPixelShaderPtr; + *v5 = (MaterialPixelShader *)DB_AddXAsset((XAssetHeader *)5, (XAssetHeader *)*varMaterialPixelShaderPtr, v6); + if ( inserted ) + *inserted = *varMaterialPixelShaderPtr; + } + DB_PopStreamPos(); +} + + +// ?Load_GfxImagePtr@@YAX_N@Z at 0x822a9a40 +void Assets::Load_GfxImagePtr(QDataStream *aStream) +{ + int v1; // r11 + bool v2; // cr58 + unsigned __int8 *v3; // r11 + const void **inserted; // r31 + + Load_Stream(0, varGfxImagePtr, 4u); + DB_PushStreamPos(0); + v1 = (int)*varGfxImagePtr; + if ( *varGfxImagePtr ) + { + if ( v1 == -1 || v1 == -2 ) + { + v2 = v1 == -2; + v3 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + g_streamPos = v3; + *varGfxImagePtr = (GfxImage *)v3; + varGfxImage = (GfxImage *)v3; + if ( v2 ) + inserted = DB_InsertPointer(); + else + inserted = 0; + Load_GfxImage(1); + Load_GfxImageAsset(varGfxImagePtr); + if ( inserted ) + *inserted = *varGfxImagePtr; + } + else + { + *varGfxImagePtr = *(GfxImage **)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + + (((unsigned int)(v1 - 1) >> 26) & 0x38)))[(v1 - 1) & 0x1FFFFFFF]; + } + } + DB_PopStreamPos(); +} + + +// ?Load_XSurface@@YAX_N@Z at 0x822a9b30 +void Assets::Load_XSurface(QDataStream *aStream) +{ + XSurface *v1; // r11 + GfxPackedVertex *verts0; // r10 + size_t v3; // r5 + unsigned __int8 *v4; // r4 + XSurface *v5; // r11 + D3DVertexBuffer *p_vb0; // r28 + GfxPackedVertex *v7; // r30 + XRigidVertList *vertList; // r10 + int vertListCount; // r4 + unsigned __int16 *triIndices; // r10 + int triCount; // r10 + unsigned __int8 *v12; // r4 + D3DIndexBuffer *p_indexBuffer; // r31 + unsigned __int16 *v14; // r30 + + Load_Stream(0, varXSurface, 0x74u); + varXSurfaceVertexInfo = &varXSurface->vertInfo; + Load_XSurfaceVertexInfo(0); + v1 = varXSurface; + verts0 = varXSurface->verts0; + if ( verts0 ) + { + if ( verts0 == (GfxPackedVertex *)-1 ) + { + v3 = __ROL4__(varXSurface->vertCount, 5); + v4 = (unsigned __int8 *)((unsigned int)(g_streamPos + 15) & 0xFFFFFFF0); + g_streamPos = v4; + varGfxPackedVertex0 = (GfxPackedVertex *)v4; + varXSurface->verts0 = (GfxPackedVertex *)v4; + Load_Stream(1, v4, v3); + v1 = varXSurface; + } + else + { + varXSurface->verts0 = (GfxPackedVertex *)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + + ((((unsigned int)&varXSurface->verts0[-1].tangent.packed + + 3) >> 26) & 0x38)))[((int)&varXSurface->verts0[-1].tangent.packed + + 3) & 0x1FFFFFFF]; + } + } + varGfxVertexBuffer = &v1->vb0; + Load_Stream(0, &v1->vb0, 0x20u); + v5 = varXSurface; + p_vb0 = &varXSurface->vb0; + v7 = varXSurface->verts0; + if ( v7 ) + { + XGSetVertexBufferHeader(__ROL4__(varXSurface->vertCount, 5), 0, 0, 0, p_vb0); + XGOffsetResourceAddress(p_vb0, v7); + v5 = varXSurface; + } + vertList = v5->vertList; + if ( vertList ) + { + if ( vertList == (XRigidVertList *)-1 ) + { + vertListCount = v5->vertListCount; + g_streamPos = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + varXRigidVertList = (XRigidVertList *)g_streamPos; + v5->vertList = (XRigidVertList *)g_streamPos; + Load_XRigidVertListArray(1, vertListCount); + v5 = varXSurface; + } + else + { + v5->vertList = (XRigidVertList *)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + + ((((unsigned int)&v5->vertList[-1].collisionTree + 3) >> 26) & 0x38)))[((int)&v5->vertList[-1].collisionTree + 3) & 0x1FFFFFFF]; + } + } + triIndices = v5->triIndices; + if ( triIndices ) + { + if ( triIndices == (unsigned __int16 *)-1 ) + { + triCount = v5->triCount; + v12 = (unsigned __int8 *)((unsigned int)(g_streamPos + 15) & 0xFFFFFFF0); + v5->triIndices = (unsigned __int16 *)v12; + g_streamPos = v12; + varr_index16_t = (unsigned __int16 *)v12; + Load_Stream(1, v12, 2 * (triCount + __ROL4__(triCount, 1))); + v5 = varXSurface; + } + else + { + v5->triIndices = (unsigned __int16 *)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + + ((((unsigned int)v5->triIndices - 1) >> 26) & 0x38)))[((int)v5->triIndices - 1) & 0x1FFFFFFF]; + } + } + varGfxIndexBuffer = &v5->indexBuffer; + Load_Stream(0, &v5->indexBuffer, 0x20u); + p_indexBuffer = &varXSurface->indexBuffer; + v14 = varXSurface->triIndices; + XGSetIndexBufferHeader( + 2 * (varXSurface->triCount + __ROL4__(varXSurface->triCount, 1)), + 0, + D3DFMT_INDEX16, + 0, + 0, + &varXSurface->indexBuffer); + XGOffsetResourceAddress(p_indexBuffer, v14); +} + + +// ?Load_SpeakerMapChannelArray@@YAX_NH@Z at 0x822a9d68 +void Assets::Load_SpeakerMapChannelArray(QDataStream *aStream, int count) +{ + XAUDIOCHANNELMAP *v2; // r31 + int v3; // r30 + + Load_Stream(0, varSpeakerMapChannel, 0x20u); + v2 = (XAUDIOCHANNELMAP *)varSpeakerMapChannel; + v3 = 2; + do + { + varSpeakerMapChannel = (XAUDIOCHANNELMAP (*)[2])v2; + Load_Stream(0, v2, 0x10u); + varXAUDIOCHANNELMAP = (XAUDIOCHANNELMAP *)varSpeakerMapChannel; + Load_XAUDIOCHANNELMAPArray(0, 2); + --v3; + v2 += 2; + } + while ( v3 ); +} + + +// ?Load_StreamedSound@@YAX_N@Z at 0x822a9dd8 +void Assets::Load_StreamedSound(QDataStream *aStream) +{ + Load_Stream(0, varStreamedSound, 0xCu); + varStreamFileName = &varStreamedSound->filename; + Load_StreamFileName(0); +} + + +// ?Load_LoadedSoundPtr@@YAX_N@Z at 0x822a9e28 +void Assets::Load_LoadedSoundPtr(QDataStream *aStream) +{ + int v1; // r11 + bool v2; // cr58 + unsigned __int8 *v3; // r11 + const void **inserted; // r30 + LoadedSound **v5; // r31 + XAssetHeader *v6; // r5 + + Load_Stream(0, varLoadedSoundPtr, 4u); + DB_PushStreamPos(0); + v1 = (int)*varLoadedSoundPtr; + if ( *varLoadedSoundPtr ) + { + if ( v1 != -1 && v1 != -2 ) + { + *varLoadedSoundPtr = *(LoadedSound **)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + + (((unsigned int)(v1 - 1) >> 26) & 0x38)))[(v1 - 1) & 0x1FFFFFFF]; + DB_PopStreamPos(); + return; + } + v2 = v1 == -2; + v3 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + g_streamPos = v3; + *varLoadedSoundPtr = (LoadedSound *)v3; + varLoadedSound = (LoadedSound *)v3; + if ( v2 ) + inserted = DB_InsertPointer(); + else + inserted = 0; + Load_LoadedSound(1); + v5 = varLoadedSoundPtr; + *v5 = (LoadedSound *)DB_AddXAsset((XAssetHeader *)0xA, (XAssetHeader *)*varLoadedSoundPtr, v6); + if ( inserted ) + *inserted = *varLoadedSoundPtr; + } + DB_PopStreamPos(); +} + + +// ?Load_XAnimPartTrans@@YAX_N@Z at 0x822a9f10 +void Assets::Load_XAnimPartTrans(QDataStream *aStream) +{ + int size; // r9 + + Load_Stream(1, varXAnimPartTrans, 4u); + size = varXAnimPartTrans->size; + varXAnimPartTransData = &varXAnimPartTrans->u; + if ( size ) + { + varXAnimPartTransFrames = &varXAnimPartTrans->u.frames; + Load_XAnimPartTransFrames(1); + } + else + { + varvec3_t = (float (*)[3])&varXAnimPartTrans->u; + Load_Stream(1, &varXAnimPartTrans->u, 0xCu); + } +} + + +// ?Load_XAnimDeltaPartQuat@@YAX_N@Z at 0x822a9f98 +void Assets::Load_XAnimDeltaPartQuat(QDataStream *aStream) +{ + int size; // r9 + + Load_Stream(1, varXAnimDeltaPartQuat, 4u); + size = varXAnimDeltaPartQuat->size; + varXAnimDeltaPartQuatData = &varXAnimDeltaPartQuat->u; + if ( size ) + { + varXAnimDeltaPartQuatDataFrames = &varXAnimDeltaPartQuat->u.frames; + Load_XAnimDeltaPartQuatDataFrames(1); + } + else + { + varXQuat2 = (__int16 (*)[2])&varXAnimDeltaPartQuat->u; + Load_Stream(1, &varXAnimDeltaPartQuat->u, 4u); + } +} + + +// ?Load_GfxReflectionProbe@@YAX_N@Z at 0x822aa020 +void Assets::Load_GfxReflectionProbe(QDataStream *aStream) +{ + Load_Stream(0, varGfxReflectionProbe, 0x10u); + varGfxImagePtr = &varGfxReflectionProbe->reflectionImage; + Load_GfxImagePtr(0); +} + + +// ?Load_PathData@@YAX_N@Z at 0x822aa0a0 +void Assets::Load_PathData(QDataStream *aStream) +{ + PathData *v1; // r31 + unsigned int nodeCount; // r4 + bool v3; // r3 + size_t v4; // r5 + unsigned __int8 *v5; // r4 + size_t v6; // r5 + unsigned __int8 *v7; // r4 + size_t v8; // r5 + unsigned __int8 *v9; // r4 + unsigned __int8 *v10; // r4 + size_t visBytes; // r5 + int nodeTreeCount; // r4 + + Load_Stream(0, varPathData, 0x28u); + v1 = varPathData; + if ( varPathData->nodes ) + { + nodeCount = varPathData->nodeCount; + g_streamPos = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + varpathnode_t = (pathnode_t *)g_streamPos; + varPathData->nodes = (pathnode_t *)g_streamPos; + Load_pathnode_tArray(1, nodeCount); + v1 = varPathData; + } + DB_PushStreamPos(1u); + if ( v1->basenodes ) + { + v4 = 16 * v1->nodeCount; + v5 = (unsigned __int8 *)((unsigned int)(g_streamPos + 15) & 0xFFFFFFF0); + g_streamPos = v5; + varpathbasenode_t = (pathbasenode_t *)v5; + v1->basenodes = (PathBaseNode *)v5; + Load_Stream(v3, v5, v4); + v1 = varPathData; + } + DB_PopStreamPos(); + if ( v1->chainNodeForNode ) + { + v6 = 2 * v1->nodeCount; + v7 = (unsigned __int8 *)((unsigned int)(g_streamPos + 1) & 0xFFFFFFFE); + g_streamPos = v7; + varUnsignedShort = (unsigned __int16 *)v7; + v1->chainNodeForNode = (unsigned __int16 *)v7; + Load_Stream(1, v7, v6); + v1 = varPathData; + } + if ( v1->nodeForChainNode ) + { + v8 = 2 * v1->nodeCount; + v9 = (unsigned __int8 *)((unsigned int)(g_streamPos + 1) & 0xFFFFFFFE); + g_streamPos = v9; + varUnsignedShort = (unsigned __int16 *)v9; + v1->nodeForChainNode = (unsigned __int16 *)v9; + Load_Stream(1, v9, v8); + v1 = varPathData; + } + if ( v1->pathVis ) + { + v10 = g_streamPos; + visBytes = v1->visBytes; + varbyte = g_streamPos; + v1->pathVis = g_streamPos; + Load_Stream(1, v10, visBytes); + v1 = varPathData; + } + if ( v1->nodeTree ) + { + nodeTreeCount = v1->nodeTreeCount; + g_streamPos = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + varpathnode_tree_t = (pathnode_tree_t *)g_streamPos; + v1->nodeTree = (pathnode_tree_t *)g_streamPos; + Load_pathnode_tree_tArray(1, nodeTreeCount); + } +} + + +// ?Load_PhysGeomInfoArray@@YAX_NH@Z at 0x822aa228 +void Assets::Load_PhysGeomInfoArray(QDataStream *aStream, int count) +{ + int v2; // r31 + PhysGeomInfo *v3; // r30 + BrushWrapper *brush; // r11 + + v2 = count; + Load_Stream(1, varPhysGeomInfo, 68 * count); + v3 = varPhysGeomInfo; + if ( v2 > 0 ) + { + do + { + varPhysGeomInfo = v3; + Load_Stream(0, v3, 0x44u); + brush = varPhysGeomInfo->brush; + if ( varPhysGeomInfo->brush ) + { + if ( brush == (BrushWrapper *)-1 ) + { + g_streamPos = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + varBrushWrapper = (BrushWrapper *)g_streamPos; + varPhysGeomInfo->brush = (BrushWrapper *)g_streamPos; + Load_BrushWrapper(1); + } + else + { + varPhysGeomInfo->brush = (BrushWrapper *)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + + ((((unsigned int)&brush[-1].planes + 3) >> 26) & 0x38)))[((unsigned int)&brush[-1].planes + 3) & 0x1FFFFFFF]; + } + } + --v2; + ++v3; + } + while ( v2 ); + } +} + + +// ?Load_GfxLightmapArray@@YAX_N@Z at 0x822aa2e8 +void Assets::Load_GfxLightmapArray(QDataStream *aStream) +{ + Load_Stream(0, varGfxLightmapArray, 8u); + varGfxImagePtr = &varGfxLightmapArray->primary; + Load_GfxImagePtr(0); + varGfxImagePtr = &varGfxLightmapArray->secondary; + Load_GfxImagePtr(0); +} + + +// ?Load_GfxLightImage@@YAX_N@Z at 0x822aa350 +void Assets::Load_GfxLightImage(QDataStream *aStream) +{ + Load_Stream(0, varGfxLightImage, 8u); + varGfxImagePtr = &varGfxLightImage->image; + Load_GfxImagePtr(0); +} + + +// ?Load_MaterialVertexShaderPtrArray@@YAX_NH@Z at 0x822aa3a0 +void Assets::Load_MaterialVertexShaderPtrArray(QDataStream *aStream, int count) +{ + MaterialVertexShader **v2; // r31 + int v3; // r29 + bool v4; // r3 + + Load_Stream(0, varMaterialVertexShaderPtr, 0x3Cu); + v2 = varMaterialVertexShaderPtr; + v3 = 15; + do + { + varMaterialVertexShaderPtr = v2; + Load_Stream(0, v2, 4u); + if ( *varMaterialVertexShaderPtr ) + Load_MaterialVertexShaderPtr(v4); + --v3; + ++v2; + } + while ( v3 ); +} + + +// ?Load_water_t@@YAX_N@Z at 0x822aa408 +void Assets::Load_water_t(QDataStream *aStream) +{ + water_t *v1; // r11 + int N; // r9 + int M; // r8 + unsigned __int8 *v4; // r4 + int v5; // r9 + int v6; // r8 + unsigned __int8 *v7; // r4 + int v8; // r9 + int v9; // r8 + unsigned __int8 *v10; // r4 + + Load_Stream(1, varwater_t, 0x48u); + v1 = varwater_t; + if ( varwater_t->H0X ) + { + N = varwater_t->N; + M = varwater_t->M; + v4 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + g_streamPos = v4; + varwater_t->H0X = (float *)v4; + varfloat = (float *)v4; + Load_Stream(1, v4, 4 * N * M); + v1 = varwater_t; + } + if ( v1->H0Y ) + { + v5 = v1->N; + v6 = v1->M; + v7 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + g_streamPos = v7; + v1->H0Y = (float *)v7; + varfloat = (float *)v7; + Load_Stream(1, v7, 4 * v5 * v6); + v1 = varwater_t; + } + if ( v1->wTerm ) + { + v8 = v1->N; + v9 = v1->M; + v10 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + g_streamPos = v10; + v1->wTerm = (float *)v10; + varfloat = (float *)v10; + Load_Stream(1, v10, 4 * v8 * v9); + v1 = varwater_t; + } + varGfxImagePtr = &v1->image; + Load_GfxImagePtr(0); +} + + +// ?Load_XSurfaceArray@@YAX_NH@Z at 0x822aa510 +void Assets::Load_XSurfaceArray(QDataStream *aStream, int count) +{ + int v2; // r31 + XSurface *v3; // r30 + + v2 = count; + Load_Stream(1, varXSurface, 116 * count); + v3 = varXSurface; + if ( v2 > 0 ) + { + do + { + varXSurface = v3; + Load_XSurface(0); + --v2; + ++v3; + } + while ( v2 ); + } +} + + +// ?Load_SpeakerMap@@YAX_N@Z at 0x822aa568 +void Assets::Load_SpeakerMap(QDataStream *aStream) +{ + Load_Stream(1, varSpeakerMap, 0x28u); + varXString = &varSpeakerMap->name; + Load_XString(0); + varSpeakerMapChannel = varSpeakerMap->channelMaps; + Load_SpeakerMapChannelArray(0, 2); +} + + +// ?Load_SoundFileRef@@YAX_N@Z at 0x822aa5d8 +void Assets::Load_SoundFileRef(QDataStream *aStream) +{ + if ( varSoundFile->type == 1 ) + { + varLoadedSoundPtr = &varSoundFileRef->loadSnd; + Load_LoadedSoundPtr(0); + } + else + { + varStreamedSound = (StreamedSound *)varSoundFileRef; + Load_Stream(0, varSoundFileRef, 0xCu); + varStreamFileName = &varStreamedSound->filename; + Load_StreamFileName(0); + } +} + + +// ?Load_XAnimDeltaPart@@YAX_N@Z at 0x822aa668 +void Assets::Load_XAnimDeltaPart(QDataStream *aStream) +{ + XAnimDeltaPart *v1; // r11 + + Load_Stream(1, varXAnimDeltaPart, 8u); + v1 = varXAnimDeltaPart; + if ( varXAnimDeltaPart->trans ) + { + g_streamPos = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + varXAnimPartTrans = (XAnimPartTrans *)g_streamPos; + varXAnimDeltaPart->trans = (XAnimPartTrans *)g_streamPos; + Load_XAnimPartTrans(1); + v1 = varXAnimDeltaPart; + } + if ( v1->quat ) + { + g_streamPos = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + varXAnimDeltaPartQuat = (XAnimDeltaPartQuat *)g_streamPos; + v1->quat = (XAnimDeltaPartQuat *)g_streamPos; + Load_XAnimDeltaPartQuat(1); + } +} + + +// ?Load_GfxReflectionProbeArray@@YAX_NH@Z at 0x822aa718 +void Assets::Load_GfxReflectionProbeArray(QDataStream *aStream, int count) +{ + int v2; // r30 + GfxReflectionProbe *v3; // r31 + + v2 = count; + Load_Stream(1, varGfxReflectionProbe, 16 * count); + v3 = varGfxReflectionProbe; + if ( v2 > 0 ) + { + do + { + varGfxReflectionProbe = v3; + Load_Stream(0, v3, 0x10u); + varGfxImagePtr = &varGfxReflectionProbe->reflectionImage; + Load_GfxImagePtr(0); + --v2; + ++v3; + } + while ( v2 ); + } +} + + +// ?Load_expressionEntry_ptrArray@@YAX_NH@Z at 0x822aa790 +void Assets::Load_expressionEntry_ptrArray(QDataStream *aStream, int count) +{ + expressionEntry **v3; // r28 + int v4; // r26 + unsigned __int8 *v5; // r4 + int type; // r10 + + Load_Stream(1, varexpressionEntry_ptr, 4 * count); + v3 = varexpressionEntry_ptr; + if ( count > 0 ) + { + v4 = count; + do + { + varexpressionEntry_ptr = v3; + Load_Stream(0, v3, 4u); + if ( *varexpressionEntry_ptr ) + { + v5 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + g_streamPos = v5; + varexpressionEntry = (expressionEntry *)v5; + *varexpressionEntry_ptr = (expressionEntry *)v5; + Load_Stream(1, v5, 0xCu); + type = varexpressionEntry->type; + varentryInternalData = &varexpressionEntry->data; + if ( type ) + { + varOperand = (Operand *)&varexpressionEntry->data; + Load_Operand(0); + } + } + --v4; + ++v3; + } + while ( v4 ); + } +} + + +// ?Load_GameWorldSp@@YAX_N@Z at 0x822aa858 +void Assets::Load_GameWorldSp(QDataStream *aStream) +{ + Load_Stream(1, varGameWorldSp, 0x2Cu); + DB_PushStreamPos(4u); + varXString = &varGameWorldSp->name; + Load_XString(0); + varPathData = &varGameWorldSp->path; + Load_PathData(0); + DB_PopStreamPos(); +} + + +// ?Load_PhysGeomList@@YAX_N@Z at 0x822aa8c8 +void Assets::Load_PhysGeomList(QDataStream *aStream) +{ + unsigned int count; // r4 + unsigned __int8 *v2; // r11 + + Load_Stream(1, varPhysGeomList, 0x2Cu); + if ( varPhysGeomList->geoms ) + { + count = varPhysGeomList->count; + v2 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + g_streamPos = v2; + varPhysGeomList->geoms = (PhysGeomInfo *)v2; + varPhysGeomInfo = (PhysGeomInfo *)v2; + Load_PhysGeomInfoArray(1, count); + } +} + + +// ?Load_GfxLightmapArrayArray@@YAX_NH@Z at 0x822aa940 +void Assets::Load_GfxLightmapArrayArray(QDataStream *aStream, int count) +{ + int v2; // r29 + GfxLightmapArray *v3; // r31 + + v2 = count; + Load_Stream(1, varGfxLightmapArray, 8 * count); + v3 = varGfxLightmapArray; + if ( v2 > 0 ) + { + do + { + varGfxLightmapArray = v3; + Load_Stream(0, v3, 8u); + varGfxImagePtr = &varGfxLightmapArray->primary; + Load_GfxImagePtr(0); + varGfxImagePtr = &varGfxLightmapArray->secondary; + Load_GfxImagePtr(0); + --v2; + ++v3; + } + while ( v2 ); + } +} + + +// ?Load_GfxLightDef@@YAX_N@Z at 0x822aa9c8 +void Assets::Load_GfxLightDef(QDataStream *aStream) +{ + Load_Stream(1, varGfxLightDef, 0x10u); + DB_PushStreamPos(4u); + varXString = &varGfxLightDef->name; + Load_XString(0); + varGfxLightImage = &varGfxLightDef->attenuation; + Load_Stream(0, &varGfxLightDef->attenuation, 8u); + varGfxImagePtr = &varGfxLightImage->image; + Load_GfxImagePtr(0); + DB_PopStreamPos(); +} + + +// ?Load_MaterialTextureDefInfo@@YAX_N@Z at 0x822aaa50 +void Assets::Load_MaterialTextureDefInfo(QDataStream *aStream) +{ + GfxImage *image; // r11 + unsigned __int8 *v2; // r11 + + if ( varMaterialTextureDef->semantic == 11 ) + { + image = varMaterialTextureDefInfo->image; + if ( varMaterialTextureDefInfo->image ) + { + if ( image == (GfxImage *)-1 ) + { + v2 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + g_streamPos = v2; + varMaterialTextureDefInfo->image = (GfxImage *)v2; + varwater_t = (water_t *)v2; + Load_water_t(1); + } + else + { + varMaterialTextureDefInfo->image = (GfxImage *)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + + ((((unsigned int)&image[-1].name + 3) >> 26) & 0x38)))[((unsigned int)&image[-1].name + 3) & 0x1FFFFFFF]; + } + } + } + else + { + varGfxImagePtr = &varMaterialTextureDefInfo->image; + Load_GfxImagePtr(0); + } +} + + +// ?Load_MaterialPass@@YAX_N@Z at 0x822aaae0 +void Assets::Load_MaterialPass(QDataStream *aStream) +{ + MaterialPass *v1; // r11 + MaterialVertexDeclaration *vertexDecl; // r10 + MaterialVertexDeclaration *v3; // r4 + MaterialPass *v4; // r11 + MaterialVertexShader *vertexShader; // r10 + int v6; // r4 + + Load_Stream(0, varMaterialPass, 0x54u); + v1 = varMaterialPass; + vertexDecl = varMaterialPass->vertexDecl; + if ( varMaterialPass->vertexDecl ) + { + if ( vertexDecl == (MaterialVertexDeclaration *)-1 ) + { + v3 = (MaterialVertexDeclaration *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + g_streamPos = &v3->streamCount; + varMaterialVertexDeclaration = v3; + varMaterialPass->vertexDecl = v3; + Load_Stream(1, v3, 0x40u); + Load_BuildVertexDecl(&varMaterialPass->vertexDecl); + v1 = varMaterialPass; + } + else + { + varMaterialPass->vertexDecl = (MaterialVertexDeclaration *)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + + ((((unsigned int)&vertexDecl[-1].routing.decl[14] + + 3) >> 26) & 0x38)))[((unsigned int)&vertexDecl[-1].routing.decl[14] + 3) & 0x1FFFFFFF]; + } + } + varMaterialVertexShaderPtr = v1->vertexShaderArray; + Load_MaterialVertexShaderPtrArray(0, 15); + v4 = varMaterialPass; + vertexShader = varMaterialPass->vertexShader; + if ( vertexShader ) + { + if ( vertexShader == (MaterialVertexShader *)-1 ) + { + g_streamPos = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + varMaterialVertexShader = (MaterialVertexShader *)g_streamPos; + varMaterialPass->vertexShader = (MaterialVertexShader *)g_streamPos; + Load_MaterialVertexShader(1); + v4 = varMaterialPass; + } + else + { + varMaterialPass->vertexShader = (MaterialVertexShader *)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + + ((((unsigned int)&varMaterialPass->vertexShader[-1].prog.loadDef.physicalPartSize + + 1) >> 26) & 0x38)))[((int)&varMaterialPass->vertexShader[-1].prog.loadDef.physicalPartSize + 1) & 0x1FFFFFFF]; + } + } + varMaterialPixelShaderPtr = &v4->pixelShader; + Load_MaterialPixelShaderPtr(0); + if ( varMaterialPass->args ) + { + v6 = varMaterialPass->stableArgCount + varMaterialPass->perObjArgCount + varMaterialPass->perPrimArgCount; + g_streamPos = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + varMaterialShaderArgument = (MaterialShaderArgument *)g_streamPos; + varMaterialPass->args = (MaterialShaderArgument *)g_streamPos; + Load_MaterialShaderArgumentArray(1, v6); + } +} + + +// ?Load_SoundFile@@YAX_N@Z at 0x822aac58 +void Assets::Load_SoundFile(QDataStream *aStream) +{ + Load_Stream(1, varSoundFile, 0x10u); + varSoundFileRef = &varSoundFile->u; + Load_SoundFileRef(0); +} + + +// ?Load_XAnimParts@@YAX_N@Z at 0x822aaca8 +void Assets::Load_XAnimParts(QDataStream *aStream) +{ + XAnimParts *v1; // r11 + int v2; // r4 + int notifyCount; // r4 + unsigned __int8 *v4; // r4 + size_t dataByteCount; // r5 + size_t v6; // r5 + unsigned __int8 *v7; // r4 + size_t v8; // r5 + unsigned __int8 *v9; // r4 + size_t v10; // r5 + unsigned __int8 *v11; // r4 + unsigned __int8 *v12; // r4 + size_t randomDataByteCount; // r5 + size_t v14; // r5 + unsigned __int8 *v15; // r4 + + Load_Stream(1, varXAnimParts, 0x5Cu); // 92 + DB_PushStreamPos(4u); + varXString = &varXAnimParts->name; + Load_XString(0); + v1 = varXAnimParts; + if ( varXAnimParts->names ) + { + v2 = varXAnimParts->boneCount[11]; + g_streamPos = (unsigned __int8 *)((unsigned int)(g_streamPos + 1) & 0xFFFFFFFE); + varScriptString = (unsigned __int16 *)g_streamPos; + varXAnimParts->names = (unsigned __int16 *)g_streamPos; + Load_ScriptStringArray(1, v2); + v1 = varXAnimParts; + } + if ( v1->notify ) + { + notifyCount = v1->notifyCount; + g_streamPos = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + varXAnimNotifyInfo = (XAnimNotifyInfo *)g_streamPos; + v1->notify = (XAnimNotifyInfo *)g_streamPos; + Load_XAnimNotifyInfoArray(1, notifyCount); + v1 = varXAnimParts; + } + if ( v1->deltaPart ) + { + g_streamPos = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + varXAnimDeltaPart = (XAnimDeltaPart *)g_streamPos; + v1->deltaPart = (XAnimDeltaPart *)g_streamPos; + Load_XAnimDeltaPart(1); + v1 = varXAnimParts; + } + if ( v1->dataByte ) + { + v4 = g_streamPos; + dataByteCount = v1->dataByteCount; + varbyte = g_streamPos; + v1->dataByte = g_streamPos; + Load_Stream(1, v4, dataByteCount); + v1 = varXAnimParts; + } + if ( v1->dataShort ) + { + v6 = __ROL4__(v1->dataShortCount, 1); + v7 = (unsigned __int8 *)((unsigned int)(g_streamPos + 1) & 0xFFFFFFFE); + g_streamPos = v7; + varshort = (__int16 *)v7; + v1->dataShort = (__int16 *)v7; + Load_Stream(1, v7, v6); + v1 = varXAnimParts; + } + if ( v1->dataInt ) + { + v8 = __ROL4__(v1->dataIntCount, 2); + v9 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + g_streamPos = v9; + varint = (int *)v9; + v1->dataInt = (int *)v9; + Load_Stream(1, v9, v8); + v1 = varXAnimParts; + } + if ( v1->randomDataShort ) + { + v10 = 2 * v1->randomDataShortCount; + v11 = (unsigned __int8 *)((unsigned int)(g_streamPos + 1) & 0xFFFFFFFE); + g_streamPos = v11; + varshort = (__int16 *)v11; + v1->randomDataShort = (__int16 *)v11; + Load_Stream(1, v11, v10); + v1 = varXAnimParts; + } + if ( v1->randomDataByte ) + { + v12 = g_streamPos; + randomDataByteCount = v1->randomDataByteCount; + varbyte = g_streamPos; + v1->randomDataByte = g_streamPos; + Load_Stream(1, v12, randomDataByteCount); + v1 = varXAnimParts; + } + if ( v1->randomDataInt ) + { + v14 = __ROL4__(v1->randomDataIntCount, 2); + v15 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + g_streamPos = v15; + varint = (int *)v15; + v1->randomDataInt = (int *)v15; + Load_Stream(1, v15, v14); + v1 = varXAnimParts; + } + varXAnimIndices = &v1->indices; + Load_XAnimIndices(0); + DB_PopStreamPos(); +} + + +// ?Load_statement@@YAX_N@Z at 0x822aaef8 +void Assets::Load_statement(QDataStream *aStream) +{ + int numEntries; // r4 + unsigned __int8 *v2; // r11 + + Load_Stream(0, varstatement, 8u); + if ( varstatement->entries ) + { + numEntries = varstatement->numEntries; + v2 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + g_streamPos = v2; + varstatement->entries = (expressionEntry **)v2; + varexpressionEntry_ptr = (expressionEntry **)v2; + Load_expressionEntry_ptrArray(1, numEntries); + } +} + + +// ?Load_GameWorldSpPtr@@YAX_N@Z at 0x822aaf70 +void Assets::Load_GameWorldSpPtr(QDataStream *aStream) +{ + int v1; // r11 + bool v2; // cr58 + unsigned __int8 *v3; // r11 + const void **inserted; // r30 + GameWorldSp **v5; // r31 + XAssetHeader *v6; // r5 + + Load_Stream(0, varGameWorldSpPtr, 4u); + DB_PushStreamPos(0); + v1 = (int)*varGameWorldSpPtr; + if ( *varGameWorldSpPtr ) + { + if ( v1 != -1 && v1 != -2 ) + { + *varGameWorldSpPtr = *(GameWorldSp **)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + + (((unsigned int)(v1 - 1) >> 26) & 0x38)))[(v1 - 1) & 0x1FFFFFFF]; + DB_PopStreamPos(); + return; + } + v2 = v1 == -2; + v3 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + g_streamPos = v3; + *varGameWorldSpPtr = (GameWorldSp *)v3; + varGameWorldSp = (GameWorldSp *)v3; + if ( v2 ) + inserted = DB_InsertPointer(); + else + inserted = 0; + Load_GameWorldSp(1); + v5 = varGameWorldSpPtr; + *v5 = (GameWorldSp *)DB_AddXAsset((XAssetHeader *)0xE, (XAssetHeader *)*varGameWorldSpPtr, v6); + if ( inserted ) + *inserted = *varGameWorldSpPtr; + } + DB_PopStreamPos(); +} + + +// ?Load_GfxLightDefPtr@@YAX_N@Z at 0x822ab058 +void Assets::Load_GfxLightDefPtr(QDataStream *aStream) +{ + int v1; // r11 + bool v2; // cr58 + unsigned __int8 *v3; // r11 + const void **inserted; // r30 + GfxLightDef **v5; // r31 + XAssetHeader *v6; // r5 + + Load_Stream(0, varGfxLightDefPtr, 4u); + DB_PushStreamPos(0); + v1 = (int)*varGfxLightDefPtr; + if ( *varGfxLightDefPtr ) + { + if ( v1 != -1 && v1 != -2 ) + { + *varGfxLightDefPtr = *(GfxLightDef **)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + + (((unsigned int)(v1 - 1) >> 26) & 0x38)))[(v1 - 1) & 0x1FFFFFFF]; + DB_PopStreamPos(); + return; + } + v2 = v1 == -2; + v3 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + g_streamPos = v3; + *varGfxLightDefPtr = (GfxLightDef *)v3; + varGfxLightDef = (GfxLightDef *)v3; + if ( v2 ) + inserted = DB_InsertPointer(); + else + inserted = 0; + Load_GfxLightDef(1); + v5 = varGfxLightDefPtr; + *v5 = (GfxLightDef *)DB_AddXAsset((XAssetHeader *)0x12, (XAssetHeader *)*varGfxLightDefPtr, v6); + if ( inserted ) + *inserted = *varGfxLightDefPtr; + } + DB_PopStreamPos(); +} + + +// ?Load_MaterialTextureDef@@YAX_N@Z at 0x822ab140 +void Assets::Load_MaterialTextureDef(QDataStream *aStream) +{ + Load_Stream(0, varMaterialTextureDef, 0xCu); + varMaterialTextureDefInfo = &varMaterialTextureDef->u; + Load_MaterialTextureDefInfo(0); +} + + +// ?Load_MaterialPassArray@@YAX_NH@Z at 0x822ab190 +void Assets::Load_MaterialPassArray(QDataStream *aStream, int count) +{ + int v2; // r31 + MaterialPass *v3; // r30 + + v2 = count; + Load_Stream(1, varMaterialPass, 84 * count); + v3 = varMaterialPass; + if ( v2 > 0 ) + { + do + { + varMaterialPass = v3; + Load_MaterialPass(0); + --v2; + ++v3; + } + while ( v2 ); + } +} + + +// ?Load_snd_alias_t@@YAX_N@Z at 0x822ab1e8 +void Assets::Load_snd_alias_t(QDataStream *aStream) +{ + snd_alias_t *v1; // r11 + SoundFile *soundFile; // r10 + SpeakerMap *speakerMap; // r10 + + Load_Stream(0, varsnd_alias_t, 0x5Cu); + varXString = &varsnd_alias_t->aliasName; + Load_XString(0); + varXString = &varsnd_alias_t->subtitle; + Load_XString(0); + varXString = &varsnd_alias_t->secondaryAliasName; + Load_XString(0); + varXString = &varsnd_alias_t->chainAliasName; + Load_XString(0); + v1 = varsnd_alias_t; + soundFile = varsnd_alias_t->soundFile; + if ( soundFile ) + { + if ( soundFile == (SoundFile *)-1 ) + { + g_streamPos = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + varSoundFile = (SoundFile *)g_streamPos; + varsnd_alias_t->soundFile = (SoundFile *)g_streamPos; + Load_SoundFile(1); + v1 = varsnd_alias_t; + } + else + { + varsnd_alias_t->soundFile = (SoundFile *)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + + ((((unsigned int)&varsnd_alias_t->soundFile[-1].u.streamSnd.filename.info.packed.length + + 3) >> 26) & 0x38)))[((int)&varsnd_alias_t->soundFile[-1].u.streamSnd.filename.info.packed.length + + 3) & 0x1FFFFFFF]; + } + } + varSndCurvePtr = &v1->volumeFalloffCurve; + Load_SndCurvePtr(0); + speakerMap = varsnd_alias_t->speakerMap; + if ( speakerMap ) + { + if ( speakerMap == (SpeakerMap *)-1 ) + { + g_streamPos = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + varSpeakerMap = (SpeakerMap *)g_streamPos; + varsnd_alias_t->speakerMap = (SpeakerMap *)g_streamPos; + Load_SpeakerMap(1); + } + else + { + varsnd_alias_t->speakerMap = (SpeakerMap *)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + + ((((unsigned int)&varsnd_alias_t->speakerMap[-1].channelMaps[1][1].paEntries + + 3) >> 26) & 0x38)))[((int)&varsnd_alias_t->speakerMap[-1].channelMaps[1][1].paEntries + + 3) & 0x1FFFFFFF]; + } + } +} + + +// ?Load_XAnimPartsPtr@@YAX_N@Z at 0x822ab348 +void Assets::Load_XAnimPartsPtr(QDataStream *aStream) +{ + int v1; // r11 + bool v2; // cr58 + unsigned __int8 *v3; // r11 + const void **inserted; // r30 + XAnimParts **v5; // r31 + XAssetHeader *v6; // r5 + + Load_Stream(0, varXAnimPartsPtr, 4u); + DB_PushStreamPos(0); + v1 = (int)*varXAnimPartsPtr; + if ( *varXAnimPartsPtr ) + { + if ( v1 != -1 && v1 != -2 ) + { + *varXAnimPartsPtr = *(XAnimParts **)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + + (((unsigned int)(v1 - 1) >> 26) & 0x38)))[(v1 - 1) & 0x1FFFFFFF]; + DB_PopStreamPos(); + return; + } + v2 = v1 == -2; + v3 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + g_streamPos = v3; + *varXAnimPartsPtr = (XAnimParts *)v3; + varXAnimParts = (XAnimParts *)v3; + if ( v2 ) + inserted = DB_InsertPointer(); + else + inserted = 0; + Load_XAnimParts(1); + v5 = varXAnimPartsPtr; + *v5 = (XAnimParts *)DB_AddXAsset((XAssetHeader *)2, (XAssetHeader *)*varXAnimPartsPtr, v6); + if ( inserted ) + *inserted = *varXAnimPartsPtr; + } + DB_PopStreamPos(); +} + + +// ?Load_GfxLight@@YAX_N@Z at 0x822ab430 +void Assets::Load_GfxLight(QDataStream *aStream) +{ + Load_Stream(1, varGfxLight, 0x40u); + varGfxLightDefPtr = &varGfxLight->def; + Load_GfxLightDefPtr(0); +} + + +// ?Load_MaterialTextureDefArray@@YAX_NH@Z at 0x822ab480 +void Assets::Load_MaterialTextureDefArray(QDataStream *aStream, int count) +{ + int v2; // r30 + MaterialTextureDef *v3; // r31 + + v2 = count; + Load_Stream(1, varMaterialTextureDef, 12 * count); + v3 = varMaterialTextureDef; + if ( v2 > 0 ) + { + do + { + varMaterialTextureDef = v3; + Load_Stream(0, v3, 0xCu); + varMaterialTextureDefInfo = &varMaterialTextureDef->u; + Load_MaterialTextureDefInfo(0); + --v2; + ++v3; + } + while ( v2 ); + } +} + + +// ?Load_MaterialTechnique@@YAX_N@Z at 0x822ab500 +void Assets::Load_MaterialTechnique(QDataStream *aStream) +{ + int passCount; // r4 + + Load_Stream(1, varMaterialTechnique, 8u); + passCount = varMaterialTechnique->passCount; + varMaterialPass = varMaterialTechnique->passArray; + Load_MaterialPassArray(1, passCount); + varXString = &varMaterialTechnique->name; + Load_XString(0); +} + + +// ?Load_snd_alias_tArray@@YAX_NH@Z at 0x822ab568 +void Assets::Load_snd_alias_tArray(QDataStream *aStream, int count) +{ + int v2; // r31 + snd_alias_t *v3; // r30 + + v2 = count; + Load_Stream(1, varsnd_alias_t, 92 * count); + v3 = varsnd_alias_t; + if ( v2 > 0 ) + { + do + { + varsnd_alias_t = v3; + Load_snd_alias_t(0); + --v2; + ++v3; + } + while ( v2 ); + } +} + + +// ?Load_snd_alias_list_t@@YAX_N@Z at 0x822ab620 +void Assets::Load_snd_alias_list_t(QDataStream *aStream) +{ + snd_alias_t *head; // r10 + int count; // r4 + unsigned __int8 *v3; // r10 + + Load_Stream(1, varsnd_alias_list_t, 0xCu); + DB_PushStreamPos(4u); + varXString = &varsnd_alias_list_t->aliasName; + Load_XString(0); + head = varsnd_alias_list_t->head; + if ( head ) + { + if ( head == (snd_alias_t *)-1 ) + { + count = varsnd_alias_list_t->count; + v3 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + g_streamPos = v3; + varsnd_alias_list_t->head = (snd_alias_t *)v3; + varsnd_alias_t = (snd_alias_t *)v3; + Load_snd_alias_tArray(1, count); + } + else + { + varsnd_alias_list_t->head = (snd_alias_t *)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + + ((((unsigned int)&varsnd_alias_list_t->head[-1].speakerMap + + 3) >> 26) & 0x38)))[((int)&varsnd_alias_list_t->head[-1].speakerMap + + 3) & 0x1FFFFFFF]; + } + } + DB_PopStreamPos(); +} + + +// ?Load_MaterialTechniquePtrArray@@YAX_NH@Z at 0x822ab6e8 +void Assets::Load_MaterialTechniquePtrArray(QDataStream *aStream, int count) +{ + MaterialTechnique **v2; // r31 + int v3; // r26 + int v4; // r11 + + Load_Stream(0, varMaterialTechniquePtr, 0x68u); + v2 = varMaterialTechniquePtr; + v3 = 26; + do + { + varMaterialTechniquePtr = v2; + Load_Stream(0, v2, 4u); + v4 = (int)*varMaterialTechniquePtr; + if ( *varMaterialTechniquePtr ) + { + if ( v4 == -1 ) + { + g_streamPos = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + varMaterialTechnique = (MaterialTechnique *)g_streamPos; + *varMaterialTechniquePtr = (MaterialTechnique *)g_streamPos; + Load_MaterialTechnique(1); + } + else + { + *varMaterialTechniquePtr = (MaterialTechnique *)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + + (((unsigned int)(v4 - 1) >> 26) & 0x38)))[(v4 - 1) & 0x1FFFFFFF]; + } + } + --v3; + ++v2; + } + while ( v3 ); +} + + +// ?Load_snd_alias_list_ptr@@YAX_N@Z at 0x822ab7a0 +void Assets::Load_snd_alias_list_ptr(QDataStream *aStream) +{ + int v1; // r11 + bool v2; // cr58 + unsigned __int8 *v3; // r11 + const void **inserted; // r30 + SoundAliasList **v5; // r31 + XAssetHeader *v6; // r5 + + Load_Stream(0, varsnd_alias_list_ptr, 4u); + DB_PushStreamPos(0); + v1 = (int)*varsnd_alias_list_ptr; + if ( *varsnd_alias_list_ptr ) + { + if ( v1 != -1 && v1 != -2 ) + { + *varsnd_alias_list_ptr = *(snd_alias_list_t **)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + + (((unsigned int)(v1 - 1) >> 26) & 0x38)))[(v1 - 1) & 0x1FFFFFFF]; + DB_PopStreamPos(); + return; + } + v2 = v1 == -2; + v3 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + g_streamPos = v3; + *varsnd_alias_list_ptr = (snd_alias_list_t *)v3; + varsnd_alias_list_t = (snd_alias_list_t *)v3; + if ( v2 ) + inserted = DB_InsertPointer(); + else + inserted = 0; + Load_snd_alias_list_t(1); + v5 = varsnd_alias_list_ptr; + *v5 = (snd_alias_list_t *)DB_AddXAsset((XAssetHeader *)8, (XAssetHeader *)*varsnd_alias_list_ptr, v6); + if ( inserted ) + *inserted = *varsnd_alias_list_ptr; + } + DB_PopStreamPos(); +} + + +// ?Load_MaterialTechniqueSet@@YAX_N@Z at 0x822ab888 +void Assets::Load_MaterialTechniqueSet(QDataStream *aStream) +{ + Load_Stream(1, varMaterialTechniqueSet, 116); + DB_PushStreamPos(4u); + varXString = &varMaterialTechniqueSet->name; + Load_XString(0); + varMaterialTechniquePtr = varMaterialTechniqueSet->techniques; + Load_MaterialTechniquePtrArray(0, 26); + DB_PopStreamPos(); +} + + +// ?Load_MaterialTechniqueSetPtr@@YAX_N@Z at 0x822ab900 +void Assets::Load_MaterialTechniqueSetPtr(QDataStream *aStream) +{ + int v1; // r11 + bool v2; // cr58 + unsigned __int8 *v3; // r11 + const void **inserted; // r30 + MaterialTechniqueSet **v5; // r31 + XAssetHeader *v6; // r5 + XAssetHeader *v7; // r3 + + Load_Stream(0, varMaterialTechniqueSetPtr, 4); + DB_PushStreamPos(0); + v1 = (int)*varMaterialTechniqueSetPtr; + if ( *varMaterialTechniqueSetPtr ) + { + if ( v1 != -1 && v1 != -2 ) + { + *varMaterialTechniqueSetPtr = *(MaterialTechniqueSet **)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + + (((unsigned int)(v1 - 1) >> 26) & 0x38)))[(v1 - 1) & 0x1FFFFFFF]; + DB_PopStreamPos(); + return; + } + v2 = v1 == -2; + v3 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + g_streamPos = v3; + *varMaterialTechniqueSetPtr = (MaterialTechniqueSet *)v3; + varMaterialTechniqueSet = (MaterialTechniqueSet *)v3; + if ( v2 ) + inserted = DB_InsertPointer(); + else + inserted = 0; + Load_MaterialTechniqueSet(1); + v5 = varMaterialTechniqueSetPtr; + v7 = DB_AddXAsset((XAssetHeader *)6, (XAssetType)*varMaterialTechniqueSetPtr, v6); + *v5 = (MaterialTechniqueSet *)v7; + v7[2].xmodelPieces = (XModelPieces *)v7; + if ( inserted ) + *inserted = *varMaterialTechniqueSetPtr; + } + DB_PopStreamPos(); +} + + +// ?Load_Material@@YAX_N@Z at 0x822ab9f0 +void Assets::Load_Material(QDataStream *aStream) +{ + Material *v1; // r11 + MaterialTextureDef *textureTable; // r10 + int textureCount; // r4 + MaterialConstantDef *constantTable; // r10 + size_t v5; // r5 + unsigned __int8 *v6; // r4 + GfxStateBits *stateBitsTable; // r10 + size_t v8; // r5 + unsigned __int8 *v9; // r4 + + Load_Stream(1, varMaterial, 0x48u); + DB_PushStreamPos(4u); + varMaterialInfo = &varMaterial->info; + Load_Stream(0, varMaterial, 0x18u); + varXString = &varMaterialInfo->name; + Load_XString(0); + varMaterialTechniqueSetPtr = &varMaterial->techniqueSet; + Load_MaterialTechniqueSetPtr(0); + v1 = varMaterial; + textureTable = varMaterial->textureTable; + if ( textureTable ) + { + if ( textureTable == (MaterialTextureDef *)-1 ) + { + textureCount = varMaterial->textureCount; + g_streamPos = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + varMaterialTextureDef = (MaterialTextureDef *)g_streamPos; + varMaterial->textureTable = (MaterialTextureDef *)g_streamPos; + Load_MaterialTextureDefArray(1, textureCount); + v1 = varMaterial; + } + else + { + varMaterial->textureTable = (MaterialTextureDef *)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + + ((((unsigned int)&varMaterial->textureTable[-1].u.water + + 3) >> 26) & 0x38)))[((int)&varMaterial->textureTable[-1].u.water + 3) & 0x1FFFFFFF]; + } + } + constantTable = v1->constantTable; + if ( constantTable ) + { + if ( constantTable == (MaterialConstantDef *)-1 ) + { + v5 = __ROL4__(v1->constantCount, 5); + v6 = (unsigned __int8 *)((unsigned int)(g_streamPos + 15) & 0xFFFFFFF0); + g_streamPos = v6; + varMaterialConstantDef = (MaterialConstantDef *)v6; + v1->constantTable = (MaterialConstantDef *)v6; + Load_Stream(1, v6, v5); + v1 = varMaterial; + } + else + { + v1->constantTable = (MaterialConstantDef *)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + + ((((unsigned int)&v1->constantTable[-1].literal[3] + + 3) >> 26) & 0x38)))[((int)&v1->constantTable[-1].literal[3] + + 3) & 0x1FFFFFFF]; + } + } + stateBitsTable = v1->stateBitsTable; + if ( stateBitsTable ) + { + if ( stateBitsTable == (GfxStateBits *)-1 ) + { + v8 = __ROL4__(v1->stateBitsCount, 3); + v9 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + g_streamPos = v9; + varGfxStateBits = (GfxStateBits *)v9; + v1->stateBitsTable = (GfxStateBits *)v9; + Load_Stream(1, v9, v8); + DB_PopStreamPos(); + return; + } + v1->stateBitsTable = (GfxStateBits *)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + + ((((unsigned int)&v1->stateBitsTable[-1].loadBits[1] + 3) >> 26) & 0x38)))[((int)&v1->stateBitsTable[-1].loadBits[1] + 3) & 0x1FFFFFFF]; + } + DB_PopStreamPos(); +} + + +// ?Load_MaterialHandle@@YAX_N@Z at 0x822abbb0 +void Assets::Load_MaterialHandle(QDataStream *aStream) +{ + int v1; // r11 + bool v2; // cr58 + unsigned __int8 *v3; // r11 + const void **inserted; // r30 + Material **v5; // r31 + XAssetHeader *v6; // r5 + + Load_Stream(0, varMaterialHandle, 4u); + DB_PushStreamPos(0); + v1 = (int)*varMaterialHandle; + if ( *varMaterialHandle ) + { + if ( v1 != -1 && v1 != -2 ) + { + *varMaterialHandle = *(Material **)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + + (((unsigned int)(v1 - 1) >> 26) & 0x38)))[(v1 - 1) & 0x1FFFFFFF]; + DB_PopStreamPos(); + return; + } + v2 = v1 == -2; + v3 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + g_streamPos = v3; + *varMaterialHandle = (Material *)v3; + varMaterial = (Material *)v3; + if ( v2 ) + inserted = DB_InsertPointer(); + else + inserted = 0; + Load_Material(1); + v5 = varMaterialHandle; + *v5 = (Material *)DB_AddXAsset((XAssetHeader *)4, (XAssetHeader *)*varMaterialHandle, v6); + if ( inserted ) + *inserted = *varMaterialHandle; + } + DB_PopStreamPos(); +} + + +// ?Load_Font@@YAX_N@Z at 0x822abc98 +void Assets::Load_Font(QDataStream *aStream) +{ + Glyph *glyphs; // r10 + int glyphCount; // r10 + Glyph *v3; // r4 + + Load_Stream(1, varFont, 0x18u); + DB_PushStreamPos(4u); + varXString = &varFont->fontName; + Load_XString(0); + varMaterialHandle = &varFont->material; + Load_MaterialHandle(0); + varMaterialHandle = &varFont->glowMaterial; + Load_MaterialHandle(0); + glyphs = varFont->glyphs; + if ( glyphs ) + { + if ( glyphs == (Glyph *)-1 ) + { + glyphCount = varFont->glyphCount; + v3 = (Glyph *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + varFont->glyphs = v3; + g_streamPos = (unsigned __int8 *)v3; + varGlyph = v3; + Load_Stream(1, v3, 24 * glyphCount); + } + else + { + varFont->glyphs = (Glyph *)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + + ((((unsigned int)&varFont->glyphs[-1].t1 + 3) >> 26) & 0x38)))[((int)&varFont->glyphs[-1].t1 + 3) & 0x1FFFFFFF]; + } + } + DB_PopStreamPos(); +} + + +// ?Load_MaterialMemory@@YAX_N@Z at 0x822abda0 +void Assets::Load_MaterialMemory(QDataStream *aStream) +{ + Load_Stream(0, varMaterialMemory, 8u); + varMaterialHandle = &varMaterialMemory->material; + Load_MaterialHandle(0); +} + + +// ?Load_sunflare_t@@YAX_N@Z at 0x822abdf0 +void Assets::Load_sunflare_t(QDataStream *aStream) +{ + Load_Stream(0, varsunflare_t, 0x60u); + varMaterialHandle = &varsunflare_t->spriteMaterial; + Load_MaterialHandle(0); + varMaterialHandle = &varsunflare_t->flareMaterial; + Load_MaterialHandle(0); +} + + +// ?Load_windowDef_t@@YAX_N@Z at 0x822abe60 +void Assets::Load_windowDef_t(QDataStream *aStream) +{ + Load_Stream(0, varwindowDef_t, 0xA8u); + varXString = &varwindowDef_t->name; + Load_XString(0); + varXString = &varwindowDef_t->group; + Load_XString(0); + varMaterialHandle = &varwindowDef_t->background; + Load_MaterialHandle(0); +} + + +// ?Load_listBoxDef_t@@YAX_N@Z at 0x822abee0 +void Assets::Load_listBoxDef_t(QDataStream *aStream) +{ + Load_Stream(1, varlistBoxDef_t, 0x168u); + varXString = &varlistBoxDef_t->doubleClick; + Load_XString(0); + varMaterialHandle = &varlistBoxDef_t->selectIcon; + Load_MaterialHandle(0); +} + + +// ?Load_GfxSurface@@YAX_N@Z at 0x822abf48 +void Assets::Load_GfxSurface(QDataStream *aStream) +{ + Load_Stream(0, varGfxSurface, 0x48u); + varMaterialHandle = &varGfxSurface->material; + Load_MaterialHandle(0); +} + + +// ?Load_MaterialHandleArray@@YAX_NH@Z at 0x822abf98 +void Assets::Load_MaterialHandleArray(QDataStream *aStream, int count) +{ + int v2; // r30 + Material **v3; // r31 + + v2 = count; + Load_Stream(atStreamStart, varMaterialHandle, 4 * count); + v3 = varMaterialHandle; + if ( v2 > 0 ) + { + do + { + varMaterialHandle = v3; + Load_MaterialHandle(0); + --v2; + ++v3; + } + while ( v2 ); + } +} + + +// ?Load_FontHandle@@YAX_N@Z at 0x822abfe8 +void Assets::Load_FontHandle(QDataStream *aStream) +{ + int v1; // r11 + bool v2; // cr58 + unsigned __int8 *v3; // r11 + const void **inserted; // r30 + Font_s **v5; // r31 + XAssetHeader *v6; // r5 + + Load_Stream(0, varFontHandle, 4u); + DB_PushStreamPos(0); + v1 = (int)*varFontHandle; + if ( *varFontHandle ) + { + if ( v1 != -1 && v1 != -2 ) + { + *varFontHandle = *(Font_s **)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + + (((unsigned int)(v1 - 1) >> 26) & 0x38)))[(v1 - 1) & 0x1FFFFFFF]; + DB_PopStreamPos(); + return; + } + v2 = v1 == -2; + v3 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + g_streamPos = v3; + *varFontHandle = (Font_s *)v3; + varFont = (Font_s *)v3; + if ( v2 ) + inserted = DB_InsertPointer(); + else + inserted = 0; + Load_Font(1); + v5 = varFontHandle; + *v5 = (Font_s *)DB_AddXAsset((XAssetHeader *)0x14, (XAssetHeader *)*varFontHandle, v6); + if ( inserted ) + *inserted = *varFontHandle; + } + DB_PopStreamPos(); +} + + +// ?Load_MaterialMemoryArray@@YAX_NH@Z at 0x822ac0d0 +void Assets::Load_MaterialMemoryArray(QDataStream *aStream, int count) +{ + int v2; // r30 + MaterialMemory *v3; // r31 + + v2 = count; + Load_Stream(1, varMaterialMemory, 8 * count); + v3 = varMaterialMemory; + if ( v2 > 0 ) + { + do + { + varMaterialMemory = v3; + Load_Stream(0, v3, 8u); + varMaterialHandle = &varMaterialMemory->material; + Load_MaterialHandle(0); + --v2; + ++v3; + } + while ( v2 ); + } +} + + +// ?Load_Window@@YAX_N@Z at 0x822ac140 +void Assets::Load_Window(QDataStream *aStream) +{ + Load_Stream(0, varWindow, 0xA8u); + varwindowDef_t = varWindow; + Load_windowDef_t(0); +} + + +// ?Load_FxElemMarkVisuals@@YAX_N@Z at 0x822ac1c0 +void Assets::Load_FxElemMarkVisuals(QDataStream *aStream) +{ + Material **v1; // r30 + int v2; // r31 + + Load_Stream(0, varFxElemMarkVisuals, 8u); + varMaterialHandle = (Material **)varFxElemMarkVisuals; + Load_Stream(0, varFxElemMarkVisuals, 8u); + v1 = varMaterialHandle; + v2 = 2; + do + { + varMaterialHandle = v1; + Load_MaterialHandle(0); + --v2; + ++v1; + } + while ( v2 ); +} + + +// ?Load_XModel@@YAX_N@Z at 0x822ac228 +void Assets::Load_XModel(QDataStream *aStream) +{ + XModel *v1; // r11 + unsigned __int16 *boneNames; // r10 + int numBones; // r4 + unsigned __int8 *parentList; // r10 + unsigned __int8 *v5; // r4 + size_t v6; // r5 + __int16 *quats; // r10 + unsigned __int8 *v8; // r4 + size_t v9; // r5 + float *trans; // r10 + unsigned __int8 *v11; // r4 + size_t v12; // r5 + unsigned __int8 *partClassification; // r10 + unsigned __int8 *v14; // r4 + size_t v15; // r5 + DObjAnimMat *baseMat; // r10 + size_t v17; // r5 + unsigned __int8 *v18; // r4 + int numsurfs; // r4 + int v20; // r4 + int numCollSurfs; // r4 + int v22; // r10 + unsigned __int8 *v23; // r4 + XModelHighMipBounds *v24; // r4 + PhysGeomList *physGeoms; // r10 + + Load_Stream(1, varXModel, 0xCCu); + DB_PushStreamPos(4u); + varXString = &varXModel->name; + Load_XString(0); + v1 = varXModel; + boneNames = varXModel->boneNames; + if ( boneNames ) + { + if ( boneNames == (unsigned __int16 *)-1 ) + { + numBones = varXModel->numBones; + g_streamPos = (unsigned __int8 *)((unsigned int)(g_streamPos + 1) & 0xFFFFFFFE); + varScriptString = (unsigned __int16 *)g_streamPos; + varXModel->boneNames = (unsigned __int16 *)g_streamPos; + Load_ScriptStringArray(1, numBones); + v1 = varXModel; + } + else + { + varXModel->boneNames = (unsigned __int16 *)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + + ((((unsigned int)varXModel->boneNames - 1) >> 26) & 0x38)))[((int)varXModel->boneNames - 1) & 0x1FFFFFFF]; + } + } + parentList = v1->parentList; + if ( parentList ) + { + if ( parentList == (unsigned __int8 *)-1 ) + { + v5 = g_streamPos; + v6 = v1->numBones - v1->numRootBones; + varbyte = g_streamPos; + v1->parentList = g_streamPos; + Load_Stream(1, v5, v6); + v1 = varXModel; + } + else + { + v1->parentList = &(*(unsigned __int8 **)((char *)&g_streamBlocks->data + + (((unsigned int)(v1->parentList - 1) >> 26) & 0x38)))[(int)(v1->parentList - 1) & 0x1FFFFFFF]; + } + } + quats = v1->quats; + if ( quats ) + { + if ( quats == (__int16 *)-1 ) + { + v8 = (unsigned __int8 *)((unsigned int)(g_streamPos + 1) & 0xFFFFFFFE); + v9 = 8 * (v1->numBones - v1->numRootBones); + g_streamPos = v8; + v1->quats = (__int16 *)v8; + varshort = (__int16 *)v8; + Load_Stream(1, v8, v9); + v1 = varXModel; + } + else + { + v1->quats = (__int16 *)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + + ((((unsigned int)v1->quats - 1) >> 26) & 0x38)))[((int)v1->quats - 1) & 0x1FFFFFFF]; + } + } + trans = v1->trans; + if ( trans ) + { + if ( trans == (float *)-1 ) + { + v11 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + v12 = 16 * (v1->numBones - v1->numRootBones); + g_streamPos = v11; + v1->trans = (float *)v11; + varfloat = (float *)v11; + Load_Stream(1, v11, v12); + v1 = varXModel; + } + else + { + v1->trans = (float *)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + + ((((unsigned int)v1->trans - 1) >> 26) & 0x38)))[((int)v1->trans - 1) & 0x1FFFFFFF]; + } + } + partClassification = v1->partClassification; + if ( partClassification ) + { + if ( partClassification == (unsigned __int8 *)-1 ) + { + v14 = g_streamPos; + v15 = v1->numBones; + varbyte = g_streamPos; + v1->partClassification = g_streamPos; + Load_Stream(1, v14, v15); + v1 = varXModel; + } + else + { + v1->partClassification = &(*(unsigned __int8 **)((char *)&g_streamBlocks->data + + (((unsigned int)(v1->partClassification - 1) >> 26) & 0x38)))[(int)(v1->partClassification - 1) & 0x1FFFFFFF]; + } + } + baseMat = v1->baseMat; + if ( baseMat ) + { + if ( baseMat == (DObjAnimMat *)-1 ) + { + v17 = __ROL4__(v1->numBones, 5); + v18 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + g_streamPos = v18; + varDObjAnimMat = (DObjAnimMat *)v18; + v1->baseMat = (DObjAnimMat *)v18; + Load_Stream(1, v18, v17); + v1 = varXModel; + } + else + { + v1->baseMat = (DObjAnimMat *)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + + ((((unsigned int)&v1->baseMat[-1].transWeight + 3) >> 26) & 0x38)))[((int)&v1->baseMat[-1].transWeight + 3) & 0x1FFFFFFF]; + } + } + if ( v1->surfs ) + { + numsurfs = v1->numsurfs; + g_streamPos = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + varXSurface = (XSurface *)g_streamPos; + v1->surfs = (XSurface *)g_streamPos; + Load_XSurfaceArray(1, numsurfs); + v1 = varXModel; + } + if ( v1->materialHandles ) + { + v20 = v1->numsurfs; + g_streamPos = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + varMaterialHandle = (Material **)g_streamPos; + v1->materialHandles = (Material **)g_streamPos; + Load_MaterialHandleArray(1, v20); + v1 = varXModel; + } + if ( v1->collSurfs ) + { + numCollSurfs = v1->numCollSurfs; + g_streamPos = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + varXModelCollSurf = (XModelCollSurf_s *)g_streamPos; + v1->collSurfs = (XModelCollSurf_s *)g_streamPos; + Load_XModelCollSurfArray(1, numCollSurfs); + v1 = varXModel; + } + if ( v1->boneInfo ) + { + v22 = v1->numBones; + v23 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + v1->boneInfo = (XBoneInfo *)v23; + g_streamPos = v23; + varXBoneInfo = (XBoneInfo *)v23; + Load_Stream(1, v23, 8 * (v22 + __ROL4__(v22, 2))); + v1 = varXModel; + } + varXModelStreamInfo = &v1->streamInfo; + Load_Stream(0, &v1->streamInfo, 4u); + if ( varXModelStreamInfo->highMipBounds ) + { + v24 = (XModelHighMipBounds *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + varXModelStreamInfo->highMipBounds = v24; + varXModelHighMipBounds = v24; + g_streamPos = (unsigned __int8 *)v24; + Load_Stream(1, v24, 8 * (varXModel->lodInfo[0].numsurfs + __ROL4__(varXModel->lodInfo[0].numsurfs, 1))); + } + varPhysPresetPtr = &varXModel->physPreset; + Load_PhysPresetPtr(0); + physGeoms = varXModel->physGeoms; + if ( physGeoms ) + { + if ( physGeoms == (PhysGeomList *)-1 ) + { + g_streamPos = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + varPhysGeomList = (PhysGeomList *)g_streamPos; + varXModel->physGeoms = (PhysGeomList *)g_streamPos; + Load_PhysGeomList(1); + DB_PopStreamPos(); + return; + } + varXModel->physGeoms = (PhysGeomList *)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + + ((((unsigned int)&varXModel->physGeoms[-1].mass.productsOfInertia[2] + + 3) >> 26) & 0x38)))[((int)&varXModel->physGeoms[-1].mass.productsOfInertia[2] + + 3) & 0x1FFFFFFF]; + } + DB_PopStreamPos(); +} + + +// ?Load_GfxSurfaceArray@@YAX_NH@Z at 0x822ac6b0 +void Assets::Load_GfxSurfaceArray(QDataStream *aStream, int count) +{ + int v2; // r30 + GfxSurface *v3; // r31 + + v2 = count; + Load_Stream(1, varGfxSurface, 72 * count); + v3 = varGfxSurface; + if ( v2 > 0 ) + { + do + { + varGfxSurface = v3; + Load_Stream(0, v3, 0x48u); + varMaterialHandle = &varGfxSurface->material; + Load_MaterialHandle(0); + --v2; + ++v3; + } + while ( v2 ); + } +} + + +// ?Load_itemDefData_t@@YAX_N@Z at 0x822ac730 +void Assets::Load_itemDefData_t(QDataStream *aStream) +{ + int type; // r11 + unsigned __int8 *v2; // r11 + unsigned __int8 *v3; // r11 + unsigned __int8 *v4; // r4 + + type = varitemDef_t->type; + switch ( type ) + { + case 6: + varlistBoxDef_ptr = &varitemDefData_t->listBox; + Load_Stream(0, varitemDefData_t, 4u); + if ( *varlistBoxDef_ptr ) + { + v2 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + g_streamPos = v2; + *varlistBoxDef_ptr = (listBoxDef_s *)v2; + varlistBoxDef_t = (listBoxDef_s *)v2; + Load_listBoxDef_t(1); + } + break; + case 4: + case 9: + case 16: + case 18: + case 11: + case 14: + case 10: + case 0: + case 17: + vareditFieldDef_ptr = (editFieldDef_s **)varitemDefData_t; + Load_Stream(0, varitemDefData_t, 4u); + if ( *vareditFieldDef_ptr ) + { + v4 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + g_streamPos = v4; + *vareditFieldDef_ptr = (editFieldDef_s *)v4; + vareditFieldDef_t = (editFieldDef_s *)v4; + Load_Stream(1, v4, 0x20u); + } + break; + case 12: + varmultiDef_ptr = (multiDef_s **)varitemDefData_t; + Load_Stream(0, varitemDefData_t, 4u); + if ( *varmultiDef_ptr ) + { + v3 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + g_streamPos = v3; + *varmultiDef_ptr = (multiDef_s *)v3; + varMultiDef = (multiDef_s *)v3; + Load_MultiDef(1); + } + break; + case 13: + varXString = (const char **)varitemDefData_t; + Load_XString(0); + break; + } +} + + +// ?Load_FxElemMarkVisualsArray@@YAX_NH@Z at 0x822ac918 +void Assets::Load_FxElemMarkVisualsArray(QDataStream *aStream, int count) +{ + int v2; // r31 + FxElemMarkVisuals *v3; // r30 + + v2 = count; + Load_Stream(1, varFxElemMarkVisuals, 8 * count); + v3 = varFxElemMarkVisuals; + if ( v2 > 0 ) + { + do + { + varFxElemMarkVisuals = v3; + Load_FxElemMarkVisuals(0); + --v2; + ++v3; + } + while ( v2 ); + } +} + + +// ?Load_XModelPtr@@YAX_N@Z at 0x822ac970 +void Assets::Load_XModelPtr(QDataStream *aStream) +{ + int v1; // r11 + bool v2; // cr58 + unsigned __int8 *v3; // r11 + const void **inserted; // r30 + XModel **v5; // r31 + XAssetHeader *v6; // r5 + + Load_Stream(0, varXModelPtr, 4u); + DB_PushStreamPos(0); + v1 = (int)*varXModelPtr; + if ( *varXModelPtr ) + { + if ( v1 != -1 && v1 != -2 ) + { + *varXModelPtr = *(XModel **)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + + (((unsigned int)(v1 - 1) >> 26) & 0x38)))[(v1 - 1) & 0x1FFFFFFF]; + DB_PopStreamPos(); + return; + } + v2 = v1 == -2; + v3 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + g_streamPos = v3; + *varXModelPtr = (XModel *)v3; + varXModel = (XModel *)v3; + if ( v2 ) + inserted = DB_InsertPointer(); + else + inserted = 0; + Load_XModel(1); + v5 = varXModelPtr; + *v5 = (XModel *)DB_AddXAsset((XAssetHeader *)3, (XAssetHeader *)*varXModelPtr, v6); + if ( inserted ) + *inserted = *varXModelPtr; + } + DB_PopStreamPos(); +} + + +// ?Load_GfxStaticModelDrawInst@@YAX_N@Z at 0x822aca58 +void Assets::Load_GfxStaticModelDrawInst(QDataStream *aStream) +{ + Load_Stream(0, varGfxStaticModelDrawInst, 0x2Cu); + varXModelPtr = &varGfxStaticModelDrawInst->model; + Load_XModelPtr(0); +} + + +// ?Load_itemDef_t@@YAX_N@Z at 0x822acaa8 +void Assets::Load_itemDef_t(QDataStream *aStream) +{ + ItemDef *v1; // r11 + unsigned __int8 *v2; // r10 + + Load_Stream(1, varitemDef_t, 0x1D4u); + varWindow = &varitemDef_t->window; + Load_Stream(0, varitemDef_t, 0xA8u); + varwindowDef_t = varWindow; + Load_windowDef_t(0); + varXString = &varitemDef_t->text; + Load_XString(0); + varXString = &varitemDef_t->mouseEnterText; + Load_XString(0); + varXString = &varitemDef_t->mouseExitText; + Load_XString(0); + varXString = &varitemDef_t->mouseEnter; + Load_XString(0); + varXString = &varitemDef_t->mouseExit; + Load_XString(0); + varXString = &varitemDef_t->action; + Load_XString(0); + varXString = &varitemDef_t->onAccept; + Load_XString(0); + varXString = &varitemDef_t->onFocus; + Load_XString(0); + varXString = &varitemDef_t->leaveFocus; + Load_XString(0); + varXString = &varitemDef_t->dvar; + Load_XString(0); + varXString = &varitemDef_t->dvarTest; + Load_XString(0); + v1 = varitemDef_t; + if ( varitemDef_t->onKey ) + { + v2 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + g_streamPos = v2; + varitemDef_t->onKey = (ItemKeyHandler *)v2; + varItemKeyHandler = (ItemKeyHandler *)v2; + Load_ItemKeyHandler(1); + v1 = varitemDef_t; + } + varXString = &v1->enableDvar; + Load_XString(0); + varsnd_alias_list_ptr = &varitemDef_t->focusSound; + Load_snd_alias_list_ptr(0); + varitemDefData_t = &varitemDef_t->typeData; + Load_itemDefData_t(0); + varstatement = &varitemDef_t->visibleExp; + Load_statement(0); + varstatement = &varitemDef_t->textExp; + Load_statement(0); + varstatement = &varitemDef_t->materialExp; + Load_statement(0); + varstatement = &varitemDef_t->rectXExp; + Load_statement(0); + varstatement = &varitemDef_t->rectYExp; + Load_statement(0); + varstatement = &varitemDef_t->rectWExp; + Load_statement(0); + varstatement = &varitemDef_t->rectHExp; + Load_statement(0); + varstatement = &varitemDef_t->forecolorAExp; + Load_statement(0); +} + + +// ?Load_cStaticModel_t@@YAX_N@Z at 0x822acd18 +void Assets::Load_cStaticModel_t(QDataStream *aStream) +{ + Load_Stream(0, varcStaticModel_t, 0x50u); + varXModelPtr = &varcStaticModel_t->xmodel; + Load_XModelPtr(0); +} + + +// ?Load_FxElemVisuals@@YAX_N@Z at 0x822acd68 +void Assets::Load_FxElemVisuals(QDataStream *aStream) +{ + int elemType; // r11 + + elemType = varFxElemDef->elemType; + switch ( elemType ) + { + case 5: + varXModelPtr = (XModel **)varFxElemVisuals; + Load_XModelPtr(0); + break; + case 10: + varFxEffectDefRef = (FxEffectDefRef *)varFxElemVisuals; + Load_FxEffectDefRef(0); + break; + case 8: + varXString = (const char **)varFxElemVisuals; + Load_XString(0); + break; + default: + if ( elemType != 6 && elemType != 7 ) + { + varMaterialHandle = (Material **)varFxElemVisuals; + Load_MaterialHandle(0); + } + break; + } +} + + +// ?Load_XModelPiece@@YAX_N@Z at 0x822ace00 +void Assets::Load_XModelPiece(QDataStream *aStream) +{ + Load_Stream(0, varXModelPiece, 0x10u); + varXModelPtr = &varXModelPiece->model; + Load_XModelPtr(0); +} + + +// ?Load_XModelPtrArray@@YAX_NH@Z at 0x822ace50 +void Assets::Load_XModelPtrArray(QDataStream *aStream, int count) +{ + XModel **v2; // r30 + int v3; // r31 + + Load_Stream(0, varXModelPtr, 0x40u); + v2 = varXModelPtr; + v3 = 16; + do + { + varXModelPtr = v2; + Load_XModelPtr(0); + --v3; + ++v2; + } + while ( v3 ); +} + + +// ?Load_GfxStaticModelDrawInstArray@@YAX_NH@Z at 0x822acea0 +void Assets::Load_GfxStaticModelDrawInstArray(QDataStream *aStream, int count) +{ + int v2; // r30 + GfxStaticModelDrawInst *v3; // r31 + + v2 = count; + Load_Stream(1, varGfxStaticModelDrawInst, 44 * count); + v3 = varGfxStaticModelDrawInst; + if ( v2 > 0 ) + { + do + { + varGfxStaticModelDrawInst = v3; + Load_Stream(0, v3, 0x2Cu); + varXModelPtr = &varGfxStaticModelDrawInst->model; + Load_XModelPtr(0); + --v2; + ++v3; + } + while ( v2 ); + } +} + + +// ?Load_cStaticModel_tArray@@YAX_NH@Z at 0x822acf48 +void Assets::Load_cStaticModel_tArray(QDataStream *aStream, int count) +{ + int v2; // r30 + cStaticModel_s *v3; // r31 + + v2 = count; + Load_Stream(1, varcStaticModel_t, 80 * count); + v3 = varcStaticModel_t; + if ( v2 > 0 ) + { + do + { + varcStaticModel_t = v3; + Load_Stream(0, v3, 0x50u); + varXModelPtr = &varcStaticModel_t->xmodel; + Load_XModelPtr(0); + --v2; + ++v3; + } + while ( v2 ); + } +} + + +// ?Load_FxElemVisualsArray@@YAX_NH@Z at 0x822acfc8 +void Assets::Load_FxElemVisualsArray(QDataStream *aStream, int count) +{ + int v2; // r31 + FxElemVisuals *v3; // r30 + + v2 = count; + Load_Stream(1, varFxElemVisuals, 4 * count); + v3 = varFxElemVisuals; + if ( v2 > 0 ) + { + do + { + varFxElemVisuals = v3; + Load_FxElemVisuals(0); + --v2; + ++v3; + } + while ( v2 ); + } +} + + +// ?Load_XModelPieceArray@@YAX_NH@Z at 0x822ad020 +void Assets::Load_XModelPieceArray(QDataStream *aStream, int count) +{ + int v2; // r30 + XModelPiece *v3; // r31 + + v2 = count; + Load_Stream(1, varXModelPiece, 16 * count); + v3 = varXModelPiece; + if ( v2 > 0 ) + { + do + { + varXModelPiece = v3; + Load_Stream(0, v3, 0x10u); + varXModelPtr = &varXModelPiece->model; + Load_XModelPtr(0); + --v2; + ++v3; + } + while ( v2 ); + } +} + + +// ?Load_GfxWorldDpvsStatic@@YAX_N@Z at 0x822ad090 +void Assets::Load_GfxWorldDpvsStatic(QDataStream *aStream) +{ + bool v1; // r3 + GfxWorldDpvsStatic *v2; // r31 + unsigned __int8 *v3; // r4 + size_t smodelCount; // r5 + bool v5; // r3 + unsigned __int8 *v6; // r4 + size_t v7; // r5 + bool v8; // r3 + unsigned __int8 *v9; // r4 + size_t v10; // r5 + bool v11; // r3 + unsigned __int8 *v12; // r4 + size_t staticSurfaceCount; // r5 + bool v14; // r3 + unsigned __int8 *v15; // r4 + size_t v16; // r5 + bool v17; // r3 + unsigned __int8 *v18; // r4 + size_t v19; // r5 + bool v20; // r3 + size_t v21; // r5 + unsigned __int8 *v22; // r4 + size_t v23; // r5 + unsigned __int8 *v24; // r4 + size_t v25; // r5 + unsigned __int8 *v26; // r4 + unsigned __int8 *v27; // r11 + GfxCullGroup *v28; // r4 + int v29; // r4 + bool v30; // r3 + size_t v31; // r5 + unsigned __int8 *v32; // r4 + bool v33; // r3 + size_t v34; // r5 + unsigned __int8 *v35; // r4 + + Load_Stream(0, varGfxWorldDpvsStatic, 0x64u); + DB_PushStreamPos(1u); + v2 = varGfxWorldDpvsStatic; + if ( varGfxWorldDpvsStatic->smodelVisData[0] ) + { + v3 = g_streamPos; + smodelCount = varGfxWorldDpvsStatic->smodelCount; + varraw_byte = g_streamPos; + varGfxWorldDpvsStatic->smodelVisData[0] = g_streamPos; + Load_Stream(v1, v3, smodelCount); + v2 = varGfxWorldDpvsStatic; + } + DB_PopStreamPos(); + DB_PushStreamPos(1u); + if ( v2->smodelVisData[1] ) + { + v6 = g_streamPos; + v7 = v2->smodelCount; + varraw_byte = g_streamPos; + v2->smodelVisData[1] = g_streamPos; + Load_Stream(v5, v6, v7); + v2 = varGfxWorldDpvsStatic; + } + DB_PopStreamPos(); + DB_PushStreamPos(1u); + if ( v2->smodelVisData[2] ) + { + v9 = g_streamPos; + v10 = v2->smodelCount; + varraw_byte = g_streamPos; + v2->smodelVisData[2] = g_streamPos; + Load_Stream(v8, v9, v10); + v2 = varGfxWorldDpvsStatic; + } + DB_PopStreamPos(); + DB_PushStreamPos(1u); + if ( v2->surfaceVisData[0] ) + { + v12 = g_streamPos; + staticSurfaceCount = v2->staticSurfaceCount; + varraw_byte = g_streamPos; + v2->surfaceVisData[0] = g_streamPos; + Load_Stream(v11, v12, staticSurfaceCount); + v2 = varGfxWorldDpvsStatic; + } + DB_PopStreamPos(); + DB_PushStreamPos(1u); + if ( v2->surfaceVisData[1] ) + { + v15 = g_streamPos; + v16 = v2->staticSurfaceCount; + varraw_byte = g_streamPos; + v2->surfaceVisData[1] = g_streamPos; + Load_Stream(v14, v15, v16); + v2 = varGfxWorldDpvsStatic; + } + DB_PopStreamPos(); + DB_PushStreamPos(1u); + if ( v2->surfaceVisData[2] ) + { + v18 = g_streamPos; + v19 = v2->staticSurfaceCount; + varraw_byte = g_streamPos; + v2->surfaceVisData[2] = g_streamPos; + Load_Stream(v17, v18, v19); + v2 = varGfxWorldDpvsStatic; + } + DB_PopStreamPos(); + DB_PushStreamPos(1u); + if ( v2->lodData ) + { + v21 = 8 * v2->smodelVisDataCount; + v22 = (unsigned __int8 *)((unsigned int)(g_streamPos + 127) & 0xFFFFFF80); + g_streamPos = v22; + varraw_uint128 = (unsigned int *)v22; + v2->lodData = (unsigned int *)v22; + Load_Stream(v20, v22, v21); + v2 = varGfxWorldDpvsStatic; + } + DB_PopStreamPos(); + if ( v2->sortedSurfIndex ) + { + v23 = 2 * v2->staticSurfaceCount; + v24 = (unsigned __int8 *)((unsigned int)(g_streamPos + 1) & 0xFFFFFFFE); + g_streamPos = v24; + varushort = (unsigned __int16 *)v24; + v2->sortedSurfIndex = (unsigned __int16 *)v24; + Load_Stream(1, v24, v23); + v2 = varGfxWorldDpvsStatic; + } + if ( v2->smodelInsts ) + { + v25 = 28 * v2->smodelCount; + v26 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + g_streamPos = v26; + v2->smodelInsts = (GfxStaticModelInst *)v26; + varGfxStaticModelInst = (GfxStaticModelInst *)v26; + Load_Stream(1, v26, v25); + v2 = varGfxWorldDpvsStatic; + } + if ( v2->surfaces ) + { + v27 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + v2->surfaces = (GfxSurface *)v27; + g_streamPos = v27; + varGfxSurface = (GfxSurface *)v27; + Load_GfxSurfaceArray(1, varGfxWorld->surfaceCount); + v2 = varGfxWorldDpvsStatic; + } + if ( v2->cullGroups ) + { + v28 = (GfxCullGroup *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + v2->cullGroups = v28; + varGfxCullGroup = v28; + g_streamPos = (unsigned __int8 *)v28; + Load_Stream(1, v28, 32 * varGfxWorld->cullGroupCount); + v2 = varGfxWorldDpvsStatic; + } + if ( v2->smodelDrawInsts ) + { + v29 = v2->smodelCount; + g_streamPos = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + varGfxStaticModelDrawInst = (GfxStaticModelDrawInst *)g_streamPos; + v2->smodelDrawInsts = (GfxStaticModelDrawInst *)g_streamPos; + Load_GfxStaticModelDrawInstArray(1, v29); + v2 = varGfxWorldDpvsStatic; + } + DB_PushStreamPos(1u); + if ( v2->surfaceMaterials ) + { + v31 = 8 * v2->staticSurfaceCount; + v32 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + g_streamPos = v32; + varGfxDrawSurfFields = (GfxDrawSurfFields *)v32; + v2->surfaceMaterials = (GfxDrawSurfFields *)v32; + Load_Stream(v30, v32, v31); + v2 = varGfxWorldDpvsStatic; + } + DB_PopStreamPos(); + DB_PushStreamPos(1u); + if ( v2->surfaceCastsSunShadow ) + { + v34 = 4 * v2->surfaceVisDataCount; + v35 = (unsigned __int8 *)((unsigned int)(g_streamPos + 127) & 0xFFFFFF80); + g_streamPos = v35; + varraw_uint128 = (unsigned int *)v35; + v2->surfaceCastsSunShadow = (unsigned int *)v35; + Load_Stream(v33, v35, v34); + } + DB_PopStreamPos(); +} + + +// ?Load_itemDef_ptrArray@@YAX_NH@Z at 0x822ad3f0 +void Assets::Load_itemDef_ptrArray(QDataStream *aStream, int count) +{ + int v2; // r31 + ItemDef **v3; // r29 + + v2 = count; + Load_Stream(1, varitemDef_ptr, 4 * count); + v3 = varitemDef_ptr; + if ( v2 > 0 ) + { + do + { + varitemDef_ptr = v3; + Load_Stream(0, v3, 4u); + if ( *varitemDef_ptr ) + { + g_streamPos = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + varitemDef_t = (ItemDef *)g_streamPos; + *varitemDef_ptr = (ItemDef *)g_streamPos; + Load_itemDef_t(1); + } + --v2; + ++v3; + } + while ( v2 ); + } +} + + +// ?Load_FxElemDefVisuals@@YAX_N@Z at 0x822ad488 +void Assets::Load_FxElemDefVisuals(QDataStream *aStream) +{ + FxElemDef *v1; // r9 + unsigned __int8 *v2; // r11 + int visualCount; // r4 + unsigned __int8 *v4; // r11 + int v5; // r4 + + v1 = varFxElemDef; + if ( varFxElemDef->elemType == 9 ) + { + if ( varFxElemDefVisuals->markArray ) + { + v2 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + g_streamPos = v2; + varFxElemDefVisuals->markArray = (FxElemMarkVisuals *)v2; + visualCount = v1->visualCount; + varFxElemMarkVisuals = (FxElemMarkVisuals *)v2; + Load_FxElemMarkVisualsArray(1, visualCount); + } + } + else if ( varFxElemDef->visualCount > 1u ) + { + if ( varFxElemDefVisuals->markArray ) + { + v4 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + g_streamPos = v4; + varFxElemDefVisuals->markArray = (FxElemMarkVisuals *)v4; + v5 = v1->visualCount; + varFxElemVisuals = (FxElemVisuals *)v4; + Load_FxElemVisualsArray(1, v5); + } + } + else + { + varFxElemVisuals = (FxElemVisuals *)varFxElemDefVisuals; + Load_FxElemVisuals(0); + } +} + + +// ?Load_XModelPieces@@YAX_N@Z at 0x822ad540 +void Assets::Load_XModelPieces(QDataStream *aStream) +{ + int numpieces; // r4 + unsigned __int8 *v2; // r11 + + Load_Stream(1, varXModelPieces, 0xCu); + varXString = &varXModelPieces->name; + Load_XString(0); + if ( varXModelPieces->pieces ) + { + numpieces = varXModelPieces->numpieces; + v2 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + g_streamPos = v2; + varXModelPieces->pieces = (XModelPiece *)v2; + varXModelPiece = (XModelPiece *)v2; + Load_XModelPieceArray(1, numpieces); + } +} + + +// ?Load_GfxWorld@@YAX_N@Z at 0x822ad5c8 +void Assets::Load_GfxWorld(QDataStream *aStream) +{ + GfxWorld *v1; // r11 + size_t v2; // r5 + unsigned __int8 *v3; // r4 + D3DIndexBuffer *p_indexBuffer; // r30 + unsigned __int16 *indices; // r28 + GfxWorld *v6; // r11 + size_t v7; // r5 + unsigned __int8 *v8; // r4 + GfxWorld *v9; // r30 + GfxLight *sunLight; // r11 + int reflectionProbeCount; // r4 + bool v12; // r3 + size_t v13; // r5 + unsigned __int8 *v14; // r4 + GfxWorld *v15; // r11 + int cellCount; // r4 + int lightmapCount; // r4 + bool v18; // r3 + GfxWorld *v19; // r30 + size_t v20; // r5 + unsigned __int8 *v21; // r4 + bool v22; // r3 + size_t v23; // r5 + unsigned __int8 *v24; // r4 + size_t v25; // r5 + unsigned __int8 *v26; // r4 + int materialMemoryCount; // r4 + bool v28; // r3 + GfxWorld *v29; // r30 + unsigned __int8 *v30; // r4 + int v31; // r11 + bool v32; // r3 + unsigned int v33; // r11 + unsigned __int8 *v34; // r4 + bool v35; // r3 + size_t v36; // r5 + unsigned __int8 *v37; // r4 + bool v38; // r3 + unsigned __int8 *v39; // r4 + size_t v40; // r5 + bool v41; // r3 + unsigned __int8 *v42; // r4 + int v43; // r11 + bool v44; // r3 + unsigned __int8 *v45; // r4 + int v46; // r11 + bool v47; // r3 + unsigned __int8 *v48; // r4 + size_t v49; // r5 + int primaryLightCount; // r4 + int v51; // r4 + + Load_Stream(1, varGfxWorld, 0x33Cu); + DB_PushStreamPos(4u); + varXString = &varGfxWorld->name; + Load_XString(0); + varXString = &varGfxWorld->baseName; + Load_XString(0); + v1 = varGfxWorld; + if ( varGfxWorld->indices ) + { + v2 = 2 * varGfxWorld->indexCount; + v3 = (unsigned __int8 *)((unsigned int)(g_streamPos + 1) & 0xFFFFFFFE); + g_streamPos = v3; + varr_index_t = (unsigned __int16 *)v3; + varGfxWorld->indices = (unsigned __int16 *)v3; + Load_Stream(1, v3, v2); + v1 = varGfxWorld; + } + varGfxIndexBuffer = &v1->indexBuffer; + Load_Stream(0, &v1->indexBuffer, 0x20u); + p_indexBuffer = &varGfxWorld->indexBuffer; + indices = varGfxWorld->indices; + XGSetIndexBufferHeader(2 * varGfxWorld->indexCount, 0, D3DFMT_INDEX16, 0, 0, &varGfxWorld->indexBuffer); + XGOffsetResourceAddress(p_indexBuffer, indices); + varGfxWorldStreamInfo = &varGfxWorld->streamInfo; + Load_GfxWorldStreamInfo(0); + v6 = varGfxWorld; + if ( varGfxWorld->skyStartSurfs ) + { + v7 = 4 * varGfxWorld->skySurfCount; + v8 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + g_streamPos = v8; + varint = (int *)v8; + varGfxWorld->skyStartSurfs = (int *)v8; + Load_Stream(1, v8, v7); + v6 = varGfxWorld; + } + varGfxImagePtr = &v6->skyImage; + Load_GfxImagePtr(0); + v9 = varGfxWorld; + sunLight = varGfxWorld->sunLight; + if ( sunLight ) + { + if ( sunLight == (GfxLight *)-1 ) + { + g_streamPos = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + varGfxLight = (GfxLight *)g_streamPos; + varGfxWorld->sunLight = (GfxLight *)g_streamPos; + Load_GfxLight(1); + v9 = varGfxWorld; + } + else + { + varGfxWorld->sunLight = (GfxLight *)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + + ((((unsigned int)&varGfxWorld->sunLight[-1].def + 3) >> 26) & 0x38)))[((int)&varGfxWorld->sunLight[-1].def + 3) & 0x1FFFFFFF]; + } + } + if ( v9->reflectionProbes ) + { + reflectionProbeCount = v9->reflectionProbeCount; + g_streamPos = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + varGfxReflectionProbe = (GfxReflectionProbe *)g_streamPos; + v9->reflectionProbes = (GfxReflectionProbe *)g_streamPos; + Load_GfxReflectionProbeArray(1, reflectionProbeCount); + v9 = varGfxWorld; + } + DB_PushStreamPos(1u); + if ( v9->reflectionProbeTextures ) + { + v13 = 4 * v9->reflectionProbeCount; + v14 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + g_streamPos = v14; + varGfxRawTexture = (GfxTexture *)v14; + v9->reflectionProbeTextures = (GfxTexture *)v14; + Load_Stream(v12, v14, v13); + v9 = varGfxWorld; + } + DB_PopStreamPos(); + varGfxWorldDpvsPlanes = &v9->dpvsPlanes; + Load_GfxWorldDpvsPlanes(0); + v15 = varGfxWorld; + if ( varGfxWorld->cells ) + { + cellCount = varGfxWorld->dpvsPlanes.cellCount; + g_streamPos = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + varGfxCell = (GfxCell *)g_streamPos; + varGfxWorld->cells = (GfxCell *)g_streamPos; + Load_GfxCellArray(1, cellCount); + v15 = varGfxWorld; + } + if ( v15->lightmaps ) + { + lightmapCount = v15->lightmapCount; + g_streamPos = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + varGfxLightmapArray = (GfxLightmapArray *)g_streamPos; + v15->lightmaps = (GfxLightmapArray *)g_streamPos; + Load_GfxLightmapArrayArray(1, lightmapCount); + v15 = varGfxWorld; + } + varGfxLightGrid = &v15->lightGrid; + Load_GfxLightGrid(0); + DB_PushStreamPos(1u); + v19 = varGfxWorld; + if ( varGfxWorld->lightmapPrimaryTextures ) + { + v20 = 4 * varGfxWorld->lightmapCount; + v21 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + g_streamPos = v21; + varGfxRawTexture = (GfxTexture *)v21; + varGfxWorld->lightmapPrimaryTextures = (GfxTexture *)v21; + Load_Stream(v18, v21, v20); + v19 = varGfxWorld; + } + DB_PopStreamPos(); + DB_PushStreamPos(1u); + if ( v19->lightmapSecondaryTextures ) + { + v23 = 4 * v19->lightmapCount; + v24 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + g_streamPos = v24; + varGfxRawTexture = (GfxTexture *)v24; + v19->lightmapSecondaryTextures = (GfxTexture *)v24; + Load_Stream(v22, v24, v23); + v19 = varGfxWorld; + } + DB_PopStreamPos(); + if ( v19->models ) + { + v25 = 56 * v19->modelCount; + v26 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + g_streamPos = v26; + v19->models = (GfxBrushModel *)v26; + varGfxBrushModel = (GfxBrushModel *)v26; + Load_Stream(1, v26, v25); + v19 = varGfxWorld; + } + if ( v19->materialMemory ) + { + materialMemoryCount = v19->materialMemoryCount; + g_streamPos = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + varMaterialMemory = (MaterialMemory *)g_streamPos; + v19->materialMemory = (MaterialMemory *)g_streamPos; + Load_MaterialMemoryArray(1, materialMemoryCount); + v19 = varGfxWorld; + } + varGfxWorldVertexData = &v19->vd; + Load_GfxWorldVertexData(0); + varGfxWorldVertexLayerData = &varGfxWorld->vld; + Load_GfxWorldVertexLayerData(0); + varsunflare_t = &varGfxWorld->sun; + Load_sunflare_t(0); + varGfxImagePtr = &varGfxWorld->outdoorImage; + Load_GfxImagePtr(0); + DB_PushStreamPos(1u); + v29 = varGfxWorld; + if ( varGfxWorld->cellCasterBits ) + { + v30 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + v31 = ((varGfxWorld->dpvsPlanes.cellCount + 31) >> 5) * varGfxWorld->dpvsPlanes.cellCount; + g_streamPos = v30; + varraw_uint = (unsigned int *)v30; + varGfxWorld->cellCasterBits = (unsigned int *)v30; + Load_Stream(v28, v30, 4 * v31); + v29 = varGfxWorld; + } + DB_PopStreamPos(); + DB_PushStreamPos(1u); + if ( v29->sceneDynModel ) + { + v33 = v29->dpvsDyn.dynEntClientCount[0]; + v34 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + g_streamPos = v34; + varGfxSceneDynModel = (GfxSceneDynModel *)v34; + v29->sceneDynModel = (GfxSceneDynModel *)v34; + Load_Stream(v32, v34, 6 * v33); + v29 = varGfxWorld; + } + DB_PopStreamPos(); + DB_PushStreamPos(1u); + if ( v29->sceneDynBrush ) + { + v36 = 4 * v29->dpvsDyn.dynEntClientCount[1]; + v37 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + g_streamPos = v37; + varGfxSceneDynBrush = (GfxSceneDynBrush *)v37; + v29->sceneDynBrush = (GfxSceneDynBrush *)v37; + Load_Stream(v35, v37, v36); + v29 = varGfxWorld; + } + DB_PopStreamPos(); + DB_PushStreamPos(1u); + if ( v29->primaryLightEntityShadowVis ) + { + v39 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + v40 = (v29->primaryLightCount - v29->sunPrimaryLightIndex - 1) << 14; + g_streamPos = v39; + varraw_uint = (unsigned int *)v39; + v29->primaryLightEntityShadowVis = (unsigned int *)v39; + Load_Stream(v38, v39, v40); + v29 = varGfxWorld; + } + DB_PopStreamPos(); + DB_PushStreamPos(1u); + if ( v29->primaryLightDynEntShadowVis[0] ) + { + v42 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + v43 = (v29->primaryLightCount - v29->sunPrimaryLightIndex - 1) * v29->dpvsDyn.dynEntClientCount[0]; + g_streamPos = v42; + v29->primaryLightDynEntShadowVis[0] = (unsigned int *)v42; + varraw_uint = (unsigned int *)v42; + Load_Stream(v41, v42, 4 * v43); + v29 = varGfxWorld; + } + DB_PopStreamPos(); + DB_PushStreamPos(1u); + if ( v29->primaryLightDynEntShadowVis[1] ) + { + v45 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + v46 = (v29->primaryLightCount - v29->sunPrimaryLightIndex - 1) * v29->dpvsDyn.dynEntClientCount[1]; + g_streamPos = v45; + v29->primaryLightDynEntShadowVis[1] = (unsigned int *)v45; + varraw_uint = (unsigned int *)v45; + Load_Stream(v44, v45, 4 * v46); + v29 = varGfxWorld; + } + DB_PopStreamPos(); + DB_PushStreamPos(1u); + if ( v29->nonSunPrimaryLightForModelDynEnt ) + { + v48 = g_streamPos; + v49 = v29->dpvsDyn.dynEntClientCount[0]; + varraw_byte = g_streamPos; + v29->nonSunPrimaryLightForModelDynEnt = g_streamPos; + Load_Stream(v47, v48, v49); + v29 = varGfxWorld; + } + DB_PopStreamPos(); + if ( v29->shadowGeom ) + { + primaryLightCount = v29->primaryLightCount; + g_streamPos = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + varGfxShadowGeometry = (GfxShadowGeometry *)g_streamPos; + v29->shadowGeom = (GfxShadowGeometry *)g_streamPos; + Load_GfxShadowGeometryArray(1, primaryLightCount); + v29 = varGfxWorld; + } + if ( v29->lightRegion ) + { + v51 = v29->primaryLightCount; + g_streamPos = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + varGfxLightRegion = (GfxLightRegion *)g_streamPos; + v29->lightRegion = (GfxLightRegion *)g_streamPos; + Load_GfxLightRegionArray(1, v51); + v29 = varGfxWorld; + } + varGfxWorldDpvsStatic = &v29->dpvs; + Load_GfxWorldDpvsStatic(0); + varGfxWorldDpvsDynamic = &varGfxWorld->dpvsDyn; + Load_GfxWorldDpvsDynamic(0); + DB_PopStreamPos(); +} + + +// ?Load_menuDef_t@@YAX_N@Z at 0x822adca0 +void Assets::Load_menuDef_t(QDataStream *aStream) +{ + menuDef_t *v1; // r11 + int itemCount; // r4 + + Load_Stream(1, varmenuDef_t, 0x134u); + DB_PushStreamPos(4u); + varWindow = &varmenuDef_t->window; + Load_Stream(0, varmenuDef_t, 0xA8u); + varwindowDef_t = varWindow; + Load_windowDef_t(0); + varXString = &varmenuDef_t->font; + Load_XString(0); + varXString = &varmenuDef_t->onOpen; + Load_XString(0); + varXString = &varmenuDef_t->onClose; + Load_XString(0); + varXString = &varmenuDef_t->onESC; + Load_XString(0); + v1 = varmenuDef_t; + if ( varmenuDef_t->onKey ) + { + g_streamPos = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + varItemKeyHandler = (ItemKeyHandler *)g_streamPos; + varmenuDef_t->onKey = (ItemKeyHandler *)g_streamPos; + Load_ItemKeyHandler(1); + v1 = varmenuDef_t; + } + varstatement = &v1->visibleExp; + Load_statement(0); + varXString = &varmenuDef_t->allowedBinding; + Load_XString(0); + varXString = &varmenuDef_t->soundName; + Load_XString(0); + varstatement = &varmenuDef_t->rectXExp; + Load_statement(0); + varstatement = &varmenuDef_t->rectYExp; + Load_statement(0); + if ( varmenuDef_t->items ) + { + itemCount = varmenuDef_t->itemCount; + g_streamPos = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + varitemDef_ptr = (ItemDef **)g_streamPos; + varmenuDef_t->items = (ItemDef **)g_streamPos; + Load_itemDef_ptrArray(1, itemCount); + } + DB_PopStreamPos(); +} + + +// ?Load_FxElemDef@@YAX_N@Z at 0x822ade30 +void Assets::Load_FxElemDef(QDataStream *aStream) +{ + FxElemDef *v1; // r11 + int v2; // r10 + FxElemVelStateSample *v3; // r4 + int v4; // r10 + FxElemVisStateSample *v5; // r4 + + Load_Stream(0, (void *)varFxElemDef, 0xFCu); + v1 = varFxElemDef; + if ( varFxElemDef->velSamples ) + { + v2 = varFxElemDef->velIntervalCount + 1; + v3 = (FxElemVelStateSample *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + varFxElemDef->velSamples = v3; + g_streamPos = (unsigned __int8 *)v3; + varFxElemVelStateSample = v3; + Load_Stream(1, (void *)v3, 96 * v2); + v1 = varFxElemDef; + } + if ( v1->visSamples ) + { + v4 = v1->visStateIntervalCount + 1; + v5 = (FxElemVisStateSample *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + v1->visSamples = v5; + g_streamPos = (unsigned __int8 *)v5; + varFxElemVisStateSample = v5; + Load_Stream(1, (void *)v5, 48 * v4); + v1 = varFxElemDef; + } + varFxElemDefVisuals = &v1->visuals; + Load_FxElemDefVisuals(0); + varFxEffectDefRef = &varFxElemDef->effectOnImpact; + Load_FxEffectDefRef(0); + varFxEffectDefRef = &varFxElemDef->effectOnDeath; + Load_FxEffectDefRef(0); + varFxEffectDefRef = &varFxElemDef->effectEmitted; + Load_FxEffectDefRef(0); + if ( varFxElemDef->trailDef ) + { + g_streamPos = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + varFxTrailDef = (FxTrailDef *)g_streamPos; + varFxElemDef->trailDef = (FxTrailDef *)g_streamPos; + Load_FxTrailDef(1); + } +} + + +// ?Load_GfxWorldPtr@@YAX_N@Z at 0x822adfd8 +void Assets::Load_GfxWorldPtr(QDataStream *aStream) +{ + int v1; // r11 + bool v2; // cr58 + unsigned __int8 *v3; // r11 + const void **inserted; // r30 + GfxWorld **v5; // r31 + XAssetHeader *v6; // r5 + + Load_Stream(0, varGfxWorldPtr, 4u); + DB_PushStreamPos(0); + v1 = (int)*varGfxWorldPtr; + if ( *varGfxWorldPtr ) + { + if ( v1 != -1 && v1 != -2 ) + { + *varGfxWorldPtr = *(GfxWorld **)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + + (((unsigned int)(v1 - 1) >> 26) & 0x38)))[(v1 - 1) & 0x1FFFFFFF]; + DB_PopStreamPos(); + return; + } + v2 = v1 == -2; + v3 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + g_streamPos = v3; + *varGfxWorldPtr = (GfxWorld *)v3; + varGfxWorld = (GfxWorld *)v3; + if ( v2 ) + inserted = DB_InsertPointer(); + else + inserted = 0; + Load_GfxWorld(1); + v5 = varGfxWorldPtr; + *v5 = (GfxWorld *)DB_AddXAsset((XAssetHeader *)0x11, (XAssetHeader *)*varGfxWorldPtr, v6); + if ( inserted ) + *inserted = *varGfxWorldPtr; + } + DB_PopStreamPos(); +} + + +// ?Load_menuDef_ptr@@YAX_N@Z at 0x822ae0c0 +void Assets::Load_menuDef_ptr(QDataStream *aStream) +{ + int v1; // r11 + bool v2; // cr58 + unsigned __int8 *v3; // r11 + const void **inserted; // r31 + XAssetHeader *v5; // r5 + int v6; // r4 + + Load_Stream(0, varmenuDef_ptr, 4u); + DB_PushStreamPos(0); + v1 = (int)*varmenuDef_ptr; + if ( *varmenuDef_ptr ) + { + if ( v1 == -1 || v1 == -2 ) + { + v2 = v1 == -2; + v3 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + g_streamPos = v3; + *varmenuDef_ptr = (menuDef_t *)v3; + varmenuDef_t = (menuDef_t *)v3; + if ( v2 ) + inserted = DB_InsertPointer(); + else + inserted = 0; + Load_menuDef_t(1); + Load_MenuAsset(varmenuDef_ptr, v6, v5); + if ( inserted ) + *inserted = *varmenuDef_ptr; + } + else + { + *varmenuDef_ptr = *(menuDef_t **)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + + (((unsigned int)(v1 - 1) >> 26) & 0x38)))[(v1 - 1) & 0x1FFFFFFF]; + } + } + DB_PopStreamPos(); +} + + +// ?Load_FxElemDefArray@@YAX_NH@Z at 0x822ae1b0 +void Assets::Load_FxElemDefArray(QDataStream *aStream, int count) +{ + int v2; // r31 + FxElemDef *v3; // r30 + + v2 = count; + Load_Stream(1, (void *)varFxElemDef, 252 * count); + v3 = varFxElemDef; + if ( v2 > 0 ) + { + do + { + varFxElemDef = v3; + Load_FxElemDef(0); + --v2; + ++v3; + } + while ( v2 ); + } +} + + +// ?Load_menuDef_ptrArray@@YAX_NH@Z at 0x822ae208 +QVector Assets::Load_menuDef_ptrArray(QDataStream *aStream, int count) +{ + QVector result; + QVector menuDefPtr; + + for (int i = 0; i < count; i++) { + menuDef_t menuDef; + + *aStream + >> menuDef. + + result << menuDef; + } + + v2 = count; + Load_Stream(1, varmenuDef_ptr, 4 * count); + v3 = varmenuDef_ptr; + if ( v2 > 0 ) + { + do + { + varmenuDef_ptr = v3; + Load_menuDef_ptr(0); + --v2; + ++v3; + } + while ( v2 ); + } + + return result; +} + + +// ?Load_FxEffectDef@@YAX_N@Z at 0x822ae260 +FxEffectDef Assets::Load_FxEffectDef(QDataStream *aStream) +{ + FxEffectDef result; + + *aStream + >> result.namePtr + >> result.flags + >> result.totalSize + >> result.msecLoopingLife + >> result.elemDefCountLooping + >> result.elemDefCountOneShot + >> result.elemDefCountEmission + >> result.elemDefsPtr; + + if (result.namePtr) + { + result.name = Load_XStringCustom(aStream); + } + + if (result.elemDefsPtr) + { + result.elemDefs = Load_FxElemDefArray(aStream, result.elemDefCountEmission + result.elemDefCountOneShot + result.elemDefCountLooping); + } + + return result; +} + + +// ?Load_FxEffectDefHandle@@YAX_N@Z at 0x822ae308 +FxEffectDef Assets::Load_FxEffectDefHandle(QDataStream *aStream) +{ + FxEffectDef result; + + qint32 fxEffectDefPtr; + *aStream >> fxEffectDefPtr; + + if (fxEffectDefPtr) + { + if (fxEffectDefPtr == -1 || fxEffectDefPtr == -2) + { + result = Load_FxEffectDef(aStream); + } + else { + *varFxEffectDefHandle = *(const FxEffectDef **)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + + (((unsigned int)(v1 - 1) >> 26) & 0x38)))[(v1 - 1) & 0x1FFFFFFF]; + DB_PopStreamPos(); + } + } + + return result +} + + +// ?Load_WeaponDef@@YAX_N@Z at 0x822ae3f0 +WeaponDef Assets::Load_WeaponDef(QDataStream *aStream) +{ + WeaponDef result; + + *aStream + >> result.szInternalNamePtr + >> result.szDisplayNamePtr + >> result.szOverlayNamePtr + >> result.gunXModelPtr + >> result.handXModelPtr; + + for (int i = 0; i < 33; i++) { + *aStream >> result.szXAnimsPtr[i]; + } + + *aStream + >> result.szModeNamePtr + >> result.hideTags[8]; + + for (int i = 0; i < 8; i++) + { + *aStream >> result.hideTags[i]; + } + for (int i = 0; i < 16; i++) + { + *aStream >> result.notetrackSoundMapKeys[i]; + } + for (int i = 0; i < 16; i++) + { + *aStream >> result.notetrackSoundMapValues[i]; + } + + *aStream + >> result.playerAnimType + >> result.weapType + >> result.weapClass + >> result.penetrateType + >> result.impactType + >> result.inventoryType + >> result.fireType + >> result.offhandClass + >> result.stance + >> result.viewFlashEffectPtr + >> result.worldFlashEffectPtr + >> result.pickupSoundPtr + >> result.pickupSoundPlayerPtr + >> result.ammoPickupSoundPtr + >> result.ammoPickupSoundPlayerPtr + >> result.projectileSoundPtr + >> result.pullbackSoundPtr + >> result.pullbackSoundPlayerPtr + >> result.fireSoundPtr + >> result.fireSoundPlayerPtr + >> result.fireLoopSoundPtr + >> result.fireLoopSoundPlayerPtr + >> result.fireStopSoundPtr + >> result.fireStopSoundPlayerPtr + >> result.fireLastSoundPtr + >> result.fireLastSoundPlayerPtr + >> result.emptyFireSoundPtr + >> result.emptyFireSoundPlayerPtr + >> result.meleeSwipeSoundPtr + >> result.meleeSwipeSoundPlayerPtr + >> result.meleeHitSoundPtr + >> result.meleeMissSoundPtr + >> result.rechamberSoundPtr + >> result.rechamberSoundPlayerPtr + >> result.reloadSoundPtr + >> result.reloadSoundPlayerPtr + >> result.reloadEmptySoundPtr + >> result.reloadEmptySoundPlayerPtr + >> result.reloadStartSoundPtr + >> result.reloadStartSoundPlayerPtr + >> result.reloadEndSoundPtr + >> result.reloadEndSoundPlayerPtr + >> result.detonateSoundPtr + >> result.detonateSoundPlayerPtr + >> result.nightVisionWearSoundPtr + >> result.nightVisionWearSoundPlayerPtr + >> result.nightVisionRemoveSoundPtr + >> result.nightVisionRemoveSoundPlayerPtr + >> result.altSwitchSoundPtr + >> result.altSwitchSoundPlayerPtr + >> result.raiseSoundPtr + >> result.raiseSoundPlayerPtr + >> result.firstRaiseSoundPtr + >> result.firstRaiseSoundPlayerPtr + >> result.putawaySoundPtr + >> result.putawaySoundPlayerPtr + >> result.bounceSoundPtr + >> result.viewShellEjectEffectPtr + >> result.worldShellEjectEffectPtr + >> result.viewLastShotEjectEffectPtr + >> result.worldLastShotEjectEffectPtr + >> result.reticleCenterPtr + >> result.reticleSidePtr + >> result.iReticleCenterSize + >> result.iReticleSideSize + >> result.iReticleMinOfs + >> result.activeReticleType + >> result.vStandMove[0] + >> result.vStandMove[1] + >> result.vStandMove[2] + >> result.vStandRot[0] + >> result.vStandRot[1] + >> result.vStandRot[2] + >> result.vDuckedOfs[0] + >> result.vDuckedOfs[1] + >> result.vDuckedOfs[2] + >> result.vDuckedMove[0] + >> result.vDuckedMove[1] + >> result.vDuckedMove[2] + >> result.vDuckedRot[0] + >> result.vDuckedRot[1] + >> result.vDuckedRot[2] + >> result.vProneOfs[0] + >> result.vProneOfs[1] + >> result.vProneOfs[2] + >> result.vProneMove[0] + >> result.vProneMove[1] + >> result.vProneMove[2] + >> result.vProneRot[0] + >> result.vProneRot[1] + >> result.vProneRot[2] + >> result.fPosMoveRate + >> result.fPosProneMoveRate + >> result.fStandMoveMinSpeed + >> result.fDuckedMoveMinSpeed + >> result.fProneMoveMinSpeed + >> result.fPosRotRate + >> result.fPosProneRotRate + >> result.fStandRotMinSpeed + >> result.fDuckedRotMinSpeed + >> result.fProneRotMinSpeed + >> result.worldModelPtr + >> result.worldClipModelPtr + >> result.rocketModelPtr + >> result.knifeModelPtr + >> result.worldKnifeModelPtr + >> result.hudIconPtr + >> result.hudIconRatio + >> result.ammoCounterIconPtr + >> result.ammoCounterIconRatio + >> result.iStartAmmo + >> result.szAmmoNamePtr + >> result.iAmmoIndex + >> result.szClipNamePtr + >> result.iClipIndex + >> result.iMaxAmmo + >> result.iClipSize + >> result.shotCount + >> result.szSharedAmmoCapNamePtr + >> result.iSharedAmmoCapIndex + >> result.iSharedAmmoCap + >> result.damage + >> result.playerDamage + >> result.iMeleeDamage + >> result.iDamageType + >> result.iFireDelay + >> result.iMeleeDelay + >> result.meleeChargeDelay + >> result.iDetonateDelay + >> result.iFireTime + >> result.iRechamberTime + >> result.iRechamberBoltTime + >> result.iHoldFireTime + >> result.iDetonateTime + >> result.iMeleeTime + >> result.meleeChargeTime + >> result.iReloadTime + >> result.reloadShowRocketTime + >> result.iReloadEmptyTime + >> result.iReloadAddTime + >> result.iReloadStartTime + >> result.iReloadStartAddTime + >> result.iReloadEndTime + >> result.iDropTime + >> result.iRaiseTime + >> result.iAltDropTime + >> result.iAltRaiseTime + >> result.quickDropTime + >> result.quickRaiseTime + >> result.iFirstRaiseTime + >> result.iEmptyRaiseTime + >> result.iEmptyDropTime + >> result.sprintInTime + >> result.sprintLoopTime + >> result.sprintOutTime + >> result.nightVisionWearTime + >> result.nightVisionWearTimeFadeOutEnd + >> result.nightVisionWearTimePowerUp + >> result.nightVisionRemoveTime + >> result.nightVisionRemoveTimePowerDown + >> result.nightVisionRemoveTimeFadeInStart + >> result.fuseTime + >> result.aiFuseTime + >> result.requireLockonToFire + >> result.noAdsWhenMagEmpty + >> result.avoidDropCleanup + >> result.autoAimRange + >> result.aimAssistRange + >> result.aimAssistRangeAds + >> result.aimPadding + >> result.enemyCrosshairRange + >> result.crosshairColorChange + >> result.moveSpeedScale + >> result.adsMoveSpeedScale + >> result.sprintDurationScale + >> result.fAdsZoomFov + >> result.fAdsZoomInFrac + >> result.fAdsZoomOutFrac + >> result.overlayMaterialPtr + >> result.overlayMaterialLowResPtr + >> result.overlayReticle + >> result.overlayInterface + >> result.overlayWidth + >> result.overlayHeight + >> result.fAdsBobFactor + >> result.fAdsViewBobMult + >> result.fHipSpreadStandMin + >> result.fHipSpreadDuckedMin + >> result.fHipSpreadProneMin + >> result.hipSpreadStandMax + >> result.hipSpreadDuckedMax + >> result.hipSpreadProneMax + >> result.fHipSpreadDecayRate + >> result.fHipSpreadFireAdd + >> result.fHipSpreadTurnAdd + >> result.fHipSpreadMoveAdd + >> result.fHipSpreadDuckedDecay + >> result.fHipSpreadProneDecay + >> result.fHipReticleSidePos + >> result.iAdsTransInTime + >> result.iAdsTransOutTime + >> result.fAdsIdleAmount + >> result.fHipIdleAmount + >> result.adsIdleSpeed + >> result.hipIdleSpeed + >> result.fIdleCrouchFactor + >> result.fIdleProneFactor + >> result.fGunMaxPitch + >> result.fGunMaxYaw + >> result.swayMaxAngle + >> result.swayLerpSpeed + >> result.swayPitchScale + >> result.swayYawScale + >> result.swayHorizScale + >> result.swayVertScale + >> result.swayShellShockScale + >> result.adsSwayMaxAngle + >> result.adsSwayLerpSpeed + >> result.adsSwayPitchScale + >> result.adsSwayYawScale + >> result.adsSwayHorizScale + >> result.adsSwayVertScale + >> result.bRifleBullet + >> result.armorPiercing + >> result.bBoltAction + >> result.aimDownSight + >> result.bRechamberWhileAds + >> result.adsViewErrorMin + >> result.adsViewErrorMax + >> result.bCookOffHold + >> result.bClipOnly + >> result.adsFireOnly + >> result.cancelAutoHolsterWhenEmpty + >> result.suppressAmmoReserveDisplay + >> result.enhanced + >> result.laserSightDuringNightvision + >> result.killIconPtr + >> result.killIconRatio + >> result.flipKillIcon + >> result.dpadIconPtr + >> result.dpadIconRatio + >> result.bNoPartialReload + >> result.bSegmentedReload + >> result.iReloadAmmoAdd + >> result.iReloadStartAdd + >> result.szAltWeaponNamePtr + >> result.dpadIconRatio + >> result.dpadIconRatio + >> result.dpadIconRatio + >> result.altWeaponIndex + >> result.iDropAmmoMin + >> result.iDropAmmoMax + >> result.blocksProne + >> result.silenced + >> result.iExplosionRadius + >> result.iExplosionRadiusMin + >> result.iExplosionInnerDamage + >> result.iExplosionOuterDamage + >> result.damageConeAngle + >> result.iProjectileSpeed + >> result.iProjectileSpeedUp + >> result.iProjectileSpeedForward + >> result.iProjectileActivateDist + >> result.projLifetime + >> result.timeToAccelerate + >> result.projectileCurvature + >> result.projectileModelPtr + >> result.projExplosion + >> result.projExplosionEffectPtr + >> result.projExplosionEffectForceNormalUp + >> result.projDudEffectPtr + >> result.projExplosionSoundPtr + >> result.projDudSoundPtr + >> result.bProjImpactExplode + >> result.stickiness + >> result.bProjImpactExplode + >> result.hasDetonator + >> result.bProjImpactExplode + >> result.timedDetonation + >> result.rotate + >> result.holdButtonToThrow + >> result.freezeMovementWhenFiring + >> result.lowAmmoWarningThreshold + >> result.bProjImpactExplode; + + for (int i = 0; i < 29; i++) { + *aStream >> result.parallelBounce[i]; + } + for (int i = 0; i < 29; i++) { + *aStream >> result.perpendicularBounce[i]; + } + + *aStream + >> result.projTrailEffectPtr + >> result.vProjectileColor[0] + >> result.vProjectileColor[1] + >> result.vProjectileColor[2] + >> result.guidedMissileType + >> result.maxSteeringAccel + >> result.projIgnitionDelay + >> result.projIgnitionEffect + >> result.projIgnitionSoundPtr + >> result.fAdsAimPitch + >> result.fAdsCrosshairInFrac + >> result.fAdsCrosshairOutFrac + >> result.adsGunKickReducedKickBullets + >> result.adsGunKickReducedKickPercent + >> result.fAdsGunKickPitchMin + >> result.fAdsGunKickPitchMax + >> result.fAdsGunKickYawMin + >> result.fAdsGunKickYawMax + >> result.fAdsGunKickAccel + >> result.fAdsGunKickSpeedMax + >> result.fAdsGunKickSpeedDecay + >> result.fAdsGunKickStaticDecay + >> result.fAdsViewKickPitchMin + >> result.fAdsViewKickPitchMax + >> result.fAdsViewKickYawMin + >> result.fAdsViewKickYawMax + >> result.fAdsViewKickCenterSpeed + >> result.fAdsViewScatterMin + >> result.fAdsViewScatterMax + >> result.fAdsSpread + >> result.hipGunKickReducedKickBullets + >> result.hipGunKickReducedKickPercent + >> result.fHipGunKickPitchMin + >> result.fHipGunKickPitchMax + >> result.fHipGunKickYawMin + >> result.fHipGunKickYawMax + >> result.fHipGunKickAccel + >> result.fHipGunKickSpeedMax + >> result.fHipGunKickSpeedDecay + >> result.fHipGunKickStaticDecay + >> result.fHipViewKickPitchMin + >> result.fHipViewKickPitchMax + >> result.fHipViewKickYawMin + >> result.fHipViewKickYawMax + >> result.fHipViewKickCenterSpeed + >> result.fHipViewScatterMin + >> result.fHipViewScatterMax + >> result.fightDist + >> result.maxDist + >> result.accuracyGraphNamePtr[0] + >> result.accuracyGraphNamePtr[1] + >> result.accuracyGraphKnotsPtr[0] + >> result.accuracyGraphKnotsPtr[1] + >> result.originalAccuracyGraphKnotsPtr[0] + >> result.originalAccuracyGraphKnotsPtr[1] + >> result.accuracyGraphKnotCount[0] + >> result.accuracyGraphKnotCount[1] + >> result.originalAccuracyGraphKnotCount[0] + >> result.originalAccuracyGraphKnotCount[1] + >> result.iPositionReloadTransTime + >> result.leftArc + >> result.rightArc + >> result.topArc + >> result.bottomArc + >> result.accuracy + >> result.aiSpread + >> result.playerSpread + >> result.minTurnSpeed[0] + >> result.minTurnSpeed[1] + >> result.maxTurnSpeed[0] + >> result.maxTurnSpeed[1] + >> result.pitchConvergenceTime + >> result.yawConvergenceTime + >> result.suppressTime + >> result.maxRange + >> result.fAnimHorRotateInc + >> result.fPlayerPositionDist + >> result.szUseHintStringPtr + >> result.dropHintStringPtr + >> result.iUseHintStringIndex + >> result.dropHintStringIndex + >> result.horizViewJitter + >> result.vertViewJitter + >> result.szScriptPtr + >> result.fOOPosAnimLength[0] + >> result.fOOPosAnimLength[1] + >> result.minDamage + >> result.minPlayerDamage + >> result.fMaxDamageRange + >> result.fMinDamageRange + >> result.destabilizationRateTime + >> result.destabilizationCurvatureMax + >> result.destabilizeDistance; + + for (int i = 0; i < 29; i++) { + *aStream >> result.locationDamageMultipliers[i]; + } + + *aStream + >> result.fireRumblePtr + >> result.meleeImpactRumblePtr + >> result.adsDofStart + >> result.adsDofEnd; + + if (result.szInternalNamePtr == -1) { + result.szInternalName = Load_XStringCustom(aStream); + } + if (result.szDisplayNamePtr == -1) { + result.szDisplayName = Load_XStringCustom(aStream); + } + if (result.szOverlayNamePtr == -1) { + result.szOverlayName = Load_XStringCustom(aStream); + } + if (result.gunXModelPtr) { + result.gunXModel = Load_XModelPtrArray(aStream, 16); + } + if (result.handXModelPtr) { + result.handXModel = Load_XModelPtr(aStream); + } + + for (int i = 0; i < 33; i++) { + if (result.szXAnimsPtr[i]) { + result.szXAnims[i] = Load_XStringCustom(aStream); + } + } + + if (result.szModeNamePtr) { + result.szModeName = Load_XStringCustom(aStream); + } + + if (result.hideTagsPtr) { + result.hideTags = Load_ScriptStringArray(aStream, 8); + } + if (result.notetrackSoundMapKeysPtr) { + result.notetrackSoundMapKeys = Load_ScriptStringArray(aStream, 16); + } + if (result.notetrackSoundMapValuesPtr) { + result.notetrackSoundMapValues = Load_ScriptStringArray(aStream, 16); + } + + if (result.viewFlashEffectPtr) { + result.viewFlashEffect = Load_FxEffectDefHandle(aStream); + } + if (result.worldFlashEffectPtr) { + result.worldFlashEffect = Load_FxEffectDefHandle(aStream); + } + + if (result.pickupSoundPtr) { + result.pickupSound = Load_SndAliasCustom(aStream); + } + if (result.pickupSoundPlayerPtr) { + result.pickupSoundPlayer = Load_SndAliasCustom(aStream); + } + if (result.ammoPickupSoundPtr) { + result.ammoPickupSound = Load_SndAliasCustom(aStream); + } + if (result.ammoPickupSoundPlayerPtr) { + result.ammoPickupSoundPlayer = Load_SndAliasCustom(aStream); + } + if (result.projectileSoundPtr) { + result.projectileSound = Load_SndAliasCustom(aStream); + } + if (result.pullbackSoundPtr) { + result.pullbackSound = Load_SndAliasCustom(aStream); + } + if (result.pullbackSoundPlayerPtr) { + result.pullbackSoundPlayer = Load_SndAliasCustom(aStream); + } + if (result.fireSoundPtr) { + result.fireSound = Load_SndAliasCustom(aStream); + } + if (result.fireSoundPlayerPtr) { + result.fireSoundPlayer = Load_SndAliasCustom(aStream); + } + if (result.fireLoopSoundPtr) { + result.fireLoopSound = Load_SndAliasCustom(aStream); + } + if (result.fireLoopSoundPlayerPtr) { + result.fireLoopSoundPlayer = Load_SndAliasCustom(aStream); + } + if (result.fireStopSoundPtr) { + result.fireStopSound = Load_SndAliasCustom(aStream); + } + if (result.fireStopSoundPlayerPtr) { + result.fireStopSoundPlayer = Load_SndAliasCustom(aStream); + } + if (result.fireLastSoundPtr) { + result.fireLastSound = Load_SndAliasCustom(aStream); + } + if (result.fireLastSoundPlayerPtr) { + result.fireLastSoundPlayer = Load_SndAliasCustom(aStream); + } + if (result.emptyFireSoundPtr) { + result.emptyFireSound = Load_SndAliasCustom(aStream); + } + if (result.emptyFireSoundPlayerPtr) { + result.emptyFireSoundPlayer = Load_SndAliasCustom(aStream); + } + if (result.meleeSwipeSoundPtr) { + result.meleeSwipeSound = Load_SndAliasCustom(aStream); + } + if (result.meleeSwipeSoundPlayerPtr) { + result.meleeSwipeSoundPlayer = Load_SndAliasCustom(aStream); + } + if (result.meleeHitSoundPtr) { + result.meleeHitSound = Load_SndAliasCustom(aStream); + } + if (result.meleeMissSoundPtr) { + result.meleeMissSound = Load_SndAliasCustom(aStream); + } + if (result.rechamberSoundPtr) { + result.rechamberSound = Load_SndAliasCustom(aStream); + } + if (result.rechamberSoundPlayerPtr) { + result.rechamberSoundPlayer = Load_SndAliasCustom(aStream); + } + if (result.reloadSoundPtr) { + result.reloadSound = Load_SndAliasCustom(aStream); + } + if (result.reloadSoundPlayerPtr) { + result.reloadSoundPlayer = Load_SndAliasCustom(aStream); + } + if (result.reloadEmptySoundPtr) { + result.reloadEmptySound = Load_SndAliasCustom(aStream); + } + if (result.reloadEmptySoundPlayerPtr) { + result.reloadEmptySoundPlayer = Load_SndAliasCustom(aStream); + } + if (result.reloadStartSoundPtr) { + result.reloadStartSound = Load_SndAliasCustom(aStream); + } + if (result.reloadStartSoundPlayerPtr) { + result.reloadStartSoundPlayer = Load_SndAliasCustom(aStream); + } + if (result.reloadEndSoundPtr) { + result.reloadEndSound = Load_SndAliasCustom(aStream); + } + if (result.reloadEndSoundPlayerPtr) { + result.reloadEndSoundPlayer = Load_SndAliasCustom(aStream); + } + if (result.nightVisionWearSoundPtr) { + result.nightVisionWearSound = Load_SndAliasCustom(aStream); + } + if (result.detonateSoundPlayerPtr) { + result.detonateSoundPlayer = Load_SndAliasCustom(aStream); + } + if (result.nightVisionWearSoundPtr) { + result.nightVisionWearSound = Load_SndAliasCustom(aStream); + } + if (result.nightVisionRemoveSoundPtr) { + result.nightVisionRemoveSound = Load_SndAliasCustom(aStream); + } + if (result.nightVisionRemoveSoundPlayerPtr) { + result.nightVisionRemoveSoundPlayer = Load_SndAliasCustom(aStream); + } + if (result.altSwitchSoundPtr) { + result.altSwitchSound = Load_SndAliasCustom(aStream); + } + if (result.altSwitchSoundPlayerPtr) { + result.altSwitchSoundPlayer = Load_SndAliasCustom(aStream); + } + if (result.raiseSoundPtr) { + result.raiseSound = Load_SndAliasCustom(aStream); + } + if (result.raiseSoundPlayerPtr) { + result.raiseSoundPlayer = Load_SndAliasCustom(aStream); + } + if (result.firstRaiseSoundPtr) { + result.firstRaiseSound = Load_SndAliasCustom(aStream); + } + if (result.firstRaiseSoundPlayerPtr) { + result.firstRaiseSoundPlayer = Load_SndAliasCustom(aStream); + } + if (result.putawaySoundPtr) { + result.putawaySound = Load_SndAliasCustom(aStream); + } + if (result.putawaySoundPlayerPtr) { + result.putawaySoundPlayer = Load_SndAliasCustom(aStream); + } + + if (result.bounceSoundPtr) + { + if (result.bounceSoundPtr == -1) + { + result.bounceSound = Load_snd_alias_list_nameArray(aStream, 29); + } + else + { + // Resolve contents from g_streamBlocks + //varWeaponDef->bounceSound = (snd_alias_list_t **)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + // + ((((unsigned int)varWeaponDef->bounceSound + // - 1) >> 26) & 0x38)))[((int)varWeaponDef->bounceSound - 1) & 0x1FFFFFFF]; + } + } + + if (result.viewShellEjectEffectPtr) { + result.viewShellEjectEffect = Load_FxEffectDefHandle(aStream); + } + if (result.worldShellEjectEffectPtr) { + result.worldShellEjectEffect = Load_FxEffectDefHandle(aStream); + } + if (result.viewLastShotEjectEffectPtr) { + result.viewLastShotEjectEffect = Load_FxEffectDefHandle(aStream); + } + if (result.worldLastShotEjectEffectPtr) { + result.worldLastShotEjectEffect = Load_FxEffectDefHandle(aStream); + } + + if (result.reticleCenterPtr) { + result.reticleCenter = Load_MaterialHandle(aStream); + } + if (result.reticleSidePtr) { + result.reticleSide = Load_MaterialHandle(aStream); + } + + if (result.worldModelPtr) { + result.worldModel = Load_XModelPtrArray(aStream, 16); + } + + if (result.worldClipModelPtr) { + result.worldClipModel = Load_XModelPtr(aStream); + } + if (result.rocketModelPtr) { + result.rocketModel = Load_XModelPtr(aStream); + } + if (result.knifeModelPtr) { + result.knifeModel = Load_XModelPtr(aStream); + } + if (result.worldKnifeModelPtr) { + result.worldKnifeModel = Load_XModelPtr(aStream); + } + + if (result.hudIconPtr) { + result.hudIcon = Load_MaterialHandle(aStream); + } + if (result.ammoCounterIconPtr) { + result.ammoCounterIcon = Load_MaterialHandle(aStream); + } + + if (result.szAmmoNamePtr == -1) { + result.szAmmoName = Load_XStringCustom(aStream); + } + if (result.szAmmoNamePtr == -1) { + result.szAmmoName = Load_XStringCustom(aStream); + } + if (result.szSharedAmmoCapNamePtr == -1) { + result.szSharedAmmoCapName = Load_XStringCustom(aStream); + } + + if (result.overlayMaterialPtr) { + result.overlayMaterial = Load_MaterialHandle(aStream); + } + if (result.overlayMaterialLowResPtr) { + result.overlayMaterialLowRes = Load_MaterialHandle(aStream); + } + if (result.killIconPtr) { + result.killIcon = Load_MaterialHandle(aStream); + } + if (result.dpadIconPtr) { + result.dpadIcon = Load_MaterialHandle(aStream); + } + + if (result.szAltWeaponNamePtr == -1) { + result.szAltWeaponName = Load_XStringCustom(aStream); + } + + if (result.projectileModelPtr) { + result.projectileModel = Load_XModelPtr(aStream); + } + + if (result.projExplosionEffectPtr) { + result.projExplosionEffect = Load_FxEffectDefHandle(aStream); + } + if (result.projDudEffectPtr) { + result.projDudEffect = Load_FxEffectDefHandle(aStream); + } + + if (result.projExplosionSoundPtr) { + result.projExplosionSound = Load_SndAliasCustom(aStream); + } + if (result.projDudSoundPtr) { + result.projDudSound = Load_SndAliasCustom(aStream); + } + + if (result.projTrailEffectPtr) { + result.projTrailEffect = Load_FxEffectDefHandle(aStream); + } + if (result.projIgnitionEffectPtr) { + result.projIgnitionEffect = Load_FxEffectDefHandle(aStream); + } + + if (result.projIgnitionSoundPtr) { + result.projIgnitionSound = Load_SndAliasCustom(aStream); + } + + if (result.accuracyGraphNamePtr[0] == -1) { + result.accuracyGraphName[0] = Load_XStringCustom(aStream); + } + + if (result.accuracyGraphKnotsPtr[0]) + { + if (result.accuracyGraphKnotsPtr[0] == -1) + { + for (int i = 0; i < varWeaponDef->accuracyGraphKnotCount[0]; i++) { + *aStream >> result.accaccuracyGraphKnots[i]; + } + } + else + { + // Resolve contents from g_streamBlocks + //varWeaponDef->accuracyGraphKnots[0] = (float (*)[2])&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + // + ((((unsigned int)&(*varWeaponDef->accuracyGraphKnots[0])[0] + // - 1) >> 26) & 0x38)))[((int)&(*varWeaponDef->accuracyGraphKnots[0])[0] - 1) & 0x1FFFFFFF]; + } + } + if (result.originalAccuracyGraphKnotsPtr[0]) + { + if (result.originalAccuracyGraphKnotsPtr[0] == -1) + { + for (int i = 0; i < varWeaponDef->accuracyGraphKnotCount[0]; i++) { + *aStream >> result.originalAccuracyGraphKnots[i]; + } + } + else + { + // Resolve contents from g_streamBlocks + //v5->originalAccuracyGraphKnots[0] = (float (*)[2])&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + // + ((((unsigned int)&(*v5->originalAccuracyGraphKnots[0])[0] + // - 1) >> 26) & 0x38)))[((int)&(*v5->originalAccuracyGraphKnots[0])[0] - 1) & 0x1FFFFFFF]; + } + } + if (result.accuracyGraphNamePtr[1] == -1) { + result.accuracyGraphName[1] = Load_XStringCustom(aStream); + } + + if (result.accuracyGraphKnotsPtr[1]) + { + if (result.accuracyGraphKnotsPtr[1] == -1) + { + for (int i = 0; i < varWeaponDef->accuracyGraphKnotCount[1]; i++) { + *aStream >> result.accuracyGraphKnots[i]; + } + } + else + { + // Resolve contents from g_streamBlocks + //varWeaponDef->accuracyGraphKnots[1] = (float (*)[2])&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + // + ((((unsigned int)&(*varWeaponDef->accuracyGraphKnots[1])[0] + // - 1) >> 26) & 0x38)))[((int)&(*varWeaponDef->accuracyGraphKnots[1])[0] - 1) & 0x1FFFFFFF]; + } + } + if (result.originalAccuracyGraphKnotsPtr[1]) + { + if (result.originalAccuracyGraphKnotsPtr[1] == -1) + { + for (int i = 0; i < varWeaponDef->accuracyGraphKnotCount[1]; i++) { + *aStream >> result.originalAccuracyGraphKnots[i]; + } + } + else + { + // Resolve contents from g_streamBlocks + //v12->originalAccuracyGraphKnots[1] = (float (*)[2])&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + // + ((((unsigned int)&(*v12->originalAccuracyGraphKnots[1])[0] + // - 1) >> 26) & 0x38)))[((int)&(*v12->originalAccuracyGraphKnots[1])[0] - 1) & 0x1FFFFFFF]; + } + } + + if (result.szUseHintStringPtr == -1) { + result.szUseHintString = Load_XStringCustom(aStream); + } + if (result.dropHintStringPtr == -1) { + result.dropHintString = Load_XStringCustom(aStream); + } + if (result.szScriptPtr == -1) { + result.szScript = Load_XStringCustom(aStream); + } + if (result.fireRumblePtr == -1) { + result.fireRumble = Load_XStringCustom(aStream); + } + if (result.meleeImpactRumblePtr == -1) { + result.meleeImpactRumble = Load_XStringCustom(aStream); + } + + return result; +} + + +// ?Load_MenuList@@YAX_N@Z at 0x822aeff8 +MenuList Assets::Load_MenuList(QDataStream *aStream) +{ + MenuList result; + + *aStream >> + result.namePtr + result.menuCount + result.menusPtr; + + if (result.namePtr) { + result.name = Load_XStringCustom(aStream); + } + + if (result.menusPtr) + { + result.menus << Load_menuDef_ptrArray(aStream, result.menuCount); + } + + return result; +} + + +// ?Load_DynEntityDef@@YAX_N@Z at 0x822af090 +DynEntityDef Assets::Load_DynEntityDef(QDataStream *aStream) +{ + DynEntityDef result; + + *aStream + >> result.type + >> result.pose + >> result.xModelPtr + >> result.brushModel + >> result.physicsBrushModel + >> result.destroyFxPtr + >> result.destroyPiecesPtr + >> result.physPresetPtr + >> result.health + >> result.mass + >> result.contents; + + if (result.xModelPtr) { + result.xModel = Load_XModelPtr(aStream); + } + if (result.destroyFxPtr) { + result.destroyFx = Load_FxEffectDefHandle(aStream); + } + if (result.destroyPiecesPtr) { + result.destroyPieces = Load_XModelPiecesPtr(aStream); + } + if (result.physPresetPtr) { + result.physPreset = Load_PhysPresetPtr(aStream); + } + + return result; +} + + +// ?Load_FxEffectDefHandleArray@@YAX_NH@Z at 0x822af148 +QVector Assets::Load_FxEffectDefHandleArray(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + + } + + v2 = count; + Load_Stream(0, varFxEffectDefHandle, 4 * count); + v3 = varFxEffectDefHandle; + if ( v2 > 0 ) + { + do + { + varFxEffectDefHandle = v3; + Load_FxEffectDefHandle(0); + --v2; + ++v3; + } + while ( v2 ); + } + + return result; +} + + +// ?Load_WeaponDefPtr@@YAX_N@Z at 0x822af1a0 +WeaponDef Assets::Load_WeaponDefPtr(QDataStream *aStream) +{ + WeaponDef result; + qint32 weaponDefPtr; + + *aStream >> weaponDefPtr; + + if (weaponDefPtr) + { + if (weaponDefPtr == -1 || weaponDefPtr == -2) + { + result = Load_WeaponDef(aStream); + } + else + { + // Resolve contents from g_streamBlocks + //*varWeaponDefPtr = *(WeaponDef **)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + // + (((unsigned int)(v1 - 1) >> 26) & 0x38)))[(v1 - 1) & 0x1FFFFFFF]; + + } + } + return result; +} + + +// ?Load_FxImpactEntry@@YAX_N@Z at 0x822af288 +FxImpactEntry Assets::Load_FxImpactEntry(QDataStream *aStream) +{ + FxImpactEntry result; + + for (int i = 0; i < 29; i++) { + qint32 nonFleshPtr; + + *aStream >> nonFleshPtr; + + result.nonFleshPtrs[i] = nonFleshPtr + } + for (int i = 0; i < 4; i++) { + qint32 fleshPtr; + + *aStream >> fleshPtr; + + result.fleshPtrs[i] = fleshPtr + } + + + for (int i = 0; i < 29; i++) { + qint32 nonFleshPtr; + + *aStream >> nonFleshPtr; + + result.nonFleshPtrs[i] = nonFleshPtr + } + for (int i = 0; i < 4; i++) { + qint32 fleshPtr; + + *aStream >> fleshPtr; + + result.fleshPtrs[i] = fleshPtr + } + + v2 = 29; + do + { + varFxEffectDefHandle = v1; + Load_FxEffectDefHandle(0); + --v2; + ++v1; + } + while ( v2 ); + varFxEffectDefHandle = varFxImpactEntry->flesh; + Load_Stream(0, varFxImpactEntry->flesh, 0x10u); + v3 = varFxEffectDefHandle; + v4 = 4; + do + { + varFxEffectDefHandle = v3; + Load_FxEffectDefHandle(0); + --v4; + ++v3; + } + while ( v4 ); + + return result; +} + + +// ?Load_MenuListPtr@@YAX_N@Z at 0x822af328 +MenuList Assets::Load_MenuListPtr(QDataStream *aStream) +{ + MenuList result; + qint32 menuListPtr; + + *aStream >> menuListPtr; + + if (menuListPtr) + { + if (menuListPtr == -1 || menuListPtr == -2) + { + result = Load_MenuList(aStream); + } + else { + // Resolve contents from g_streamBlocks + //*varMenuListPtr = *(MenuList **)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + // + (((unsigned int)(v1 - 1) >> 26) & 0x38)))[(v1 - 1) & 0x1FFFFFFF]; + } + } + return result; +} + + +// ?Load_DynEntityDefArray@@YAX_NH@Z at 0x822af410 +QVector Assets::Load_DynEntityDefArray(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + result << Load_DynEntityDef(aStream); + } + + return result; +} + + +// ?Load_FxImpactEntryArray@@YAX_NH@Z at 0x822af470 +QVector Assets::Load_FxImpactEntryArray(QDataStream *aStream, int count) +{ + QVector result; + + for (int i = 0; i < count; i++) { + result << Assets::Load_FxImpactEntry(aStream); + } + + return result; +} + + +// ?Load_clipMap_t@@YAX_N@Z at 0x822af4c0 +clipMap_t Assets::Load_clipMap_t(QDataStream *aStream) +{ + clipMap_t result; + + *aStream + >> result.namePtr + >> result.isInUse + >> result.planeCount + >> result.planesPtr + >> result.numStaticModels + >> result.staticModelListPtr + >> result.numMaterials + >> result.materialsPtr + >> result.numBrushSides + >> result.brushsidesPtr + >> result.numBrushEdges + >> result.brushEdgesPtr + >> result.numNodes + >> result.nodesPtr + >> result.leafsPtr + >> result.leafbrushNodesCount + >> result.leafbrushNodesPtr + >> result.numLeafBrushes + >> result.leafbrushesPtr + >> result.numLeafSurfaces + >> result.leafsurfacesPtr + >> result.vertCount + >> result.verts[0] + >> result.verts[1] + >> result.verts[2] + >> result.triCount + >> result.triIndicesPtr + >> result.triEdgeIsWalkablePtr + >> result.borderCount + >> result.bordersPtr + >> result.partitionCount + >> result.partitionsPtr + >> result.aabbTreeCount + >> result.aabbTreesPtr + >> result.numSubModels + >> result.cmodelsPtr + >> result.numBrushes + >> result.brushesPtr + >> result.numClusters + >> result.clusterBytes + >> result.visibilityPtr + >> result.vised + >> result.visibilityPtr + >> result.visibilityPtr + >> result.visibilityPtr + >> result.visibilityPtr; + + if (result.namePtr == -1) { + result.name = Assets::Load_XStringCustom(aStream); + } + if (result.planesPtr) + { + if (result.planesPtr == -1) + { + for (int i = 0; i < result.planeCount; i++) { + result.planes << Asset::Load_cplane_s(aStream); + } + } + else + { + + //varclipMap_t->planes = (cplane_s *)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + // + (((unsigned int)&varclipMap_t->planes[-1].pad[1] >> 26) & 0x38)))[(int)&varclipMap_t->planes[-1].pad[1] & 0x1FFFFFFF]; + } + } + if (result.staticModelListPtr) + { + result.staticModelList = Load_cStaticModel_tArray(aStream, result.numStaticModels); + } + if (result.materialsPtr) + { + result.materials = Load_dmaterial_tArray(aStream, result.numMaterials); + } + if (result.brushsidesPtr) + { + result.brushsides = Load_cbrushside_tArray(aStream, result.numBrushSides); + } + if (result.brushEdgesPtr) + { + result.brushEdges = Load_cbrushedge_tArray(aStream, result.numBrushEdges); + } + if (result.nodesPtr) + { + result.nodes = Load_cNode_tArray(aStream, result.numNodes); + } + if (result.leafsPtr) + { + result.leafs = Load_cLeaf_tArray(aStream, result.numLeafs); + } + if (result.leafbrushesPtr) + { + result.leafbrushes = Load_LeafBrushArray(aStream, result.numLeafBrushes); + } + if ( v1->leafbrushNodes ) + { + leafbrushNodesCount = v1->leafbrushNodesCount; + g_streamPos = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + varcLeafBrushNode_t = (CLeafBrushNode *)g_streamPos; + v1->leafbrushNodes = (CLeafBrushNode *)g_streamPos; + Load_cLeafBrushNode_tArray(1, leafbrushNodesCount); + v1 = varclipMap_t; + } + if ( v1->leafsurfaces ) + { + v17 = 4 * v1->numLeafSurfaces; + v18 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + g_streamPos = v18; + varuint = (unsigned int *)v18; + v1->leafsurfaces = (unsigned int *)v18; + Load_Stream(1, v18, v17); + v1 = varclipMap_t; + } + if ( v1->verts ) + { + vertCount = v1->vertCount; + v20 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + v1->verts = (float (*)[3])v20; + g_streamPos = v20; + varvec3_t = (float (*)[3])v20; + Load_Stream(1, v20, 12 * vertCount); + v1 = varclipMap_t; + } + if ( v1->triIndices ) + { + triCount = v1->triCount; + v22 = (unsigned __int8 *)((unsigned int)(g_streamPos + 1) & 0xFFFFFFFE); + v1->triIndices = (unsigned __int16 *)v22; + g_streamPos = v22; + varUnsignedShort = (unsigned __int16 *)v22; + Load_Stream(1, v22, 6 * triCount); + v1 = varclipMap_t; + } + if ( v1->triEdgeIsWalkable ) + { + v23 = g_streamPos; + v24 = v1->triCount; + v1->triEdgeIsWalkable = g_streamPos; + g_streamPos = v23; + varbyte = v23; + Load_Stream(1, v23, ((3 * v24 + 31) >> 3) & 0xFFFFFFFC); + v1 = varclipMap_t; + } + if ( v1->borders ) + { + v25 = 28 * v1->borderCount; + v26 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + v1->borders = (CollisionBorder *)v26; + g_streamPos = v26; + varCollisionBorder = (CollisionBorder *)v26; + Load_Stream(1, v26, v25); + v1 = varclipMap_t; + } + if ( v1->partitions ) + { + partitionCount = v1->partitionCount; + g_streamPos = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + varCollisionPartition = (CollisionPartition *)g_streamPos; + v1->partitions = (CollisionPartition *)g_streamPos; + Load_CollisionPartitionArray(1, partitionCount); + v1 = varclipMap_t; + } + if ( v1->aabbTrees ) + { + v28 = 32 * v1->aabbTreeCount; + v29 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + g_streamPos = v29; + varCollisionAabbTree = (CollisionAabbTree *)v29; + v1->aabbTrees = (CollisionAabbTree *)v29; + Load_Stream(1, v29, v28); + v1 = varclipMap_t; + } + if ( v1->cmodels ) + { + numSubModels = v1->numSubModels; + v31 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + v1->cmodels = (cmodel_t *)v31; + g_streamPos = v31; + varcmodel_t = (cmodel_t *)v31; + Load_Stream(1, v31, 72 * numSubModels); + v1 = varclipMap_t; + } + if ( v1->brushes ) + { + numBrushes = v1->numBrushes; + g_streamPos = (unsigned __int8 *)((unsigned int)(g_streamPos + 15) & 0xFFFFFFF0); + varcbrush_t = (cbrush_t *)g_streamPos; + v1->brushes = (cbrush_t *)g_streamPos; + Load_cbrush_tArray(1, numBrushes); + v1 = varclipMap_t; + } + if ( v1->visibility ) + { + v33 = g_streamPos; + v34 = v1->clusterBytes * v1->numClusters; + v1->visibility = g_streamPos; + varbyte = v33; + Load_Stream(1, v33, v34); + v1 = varclipMap_t; + } + varMapEntsPtr = &v1->mapEnts; + Load_MapEntsPtr(0); + v35 = varclipMap_t; + box_brush = varclipMap_t->box_brush; + if ( box_brush ) + { + if ( box_brush == (cbrush_t *)-1 ) + { + g_streamPos = (unsigned __int8 *)((unsigned int)(g_streamPos + 15) & 0xFFFFFFF0); + varcbrush_t = (cbrush_t *)g_streamPos; + varclipMap_t->box_brush = (cbrush_t *)g_streamPos; + Load_CBrush(1); + v35 = varclipMap_t; + } + else + { + varclipMap_t->box_brush = (cbrush_t *)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + + (((unsigned int)varclipMap_t->box_brush[-1].edgeCount[5] >> 26) & 0x38)))[(int)varclipMap_t->box_brush[-1].edgeCount[5] & 0x1FFFFFFF]; + } + } + if ( v35->dynEntDefList[0] ) + { + v37 = v35->dynEntCount[0]; + g_streamPos = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + varDynEntityDef = (DynEntityDef *)g_streamPos; + v35->dynEntDefList[0] = (DynEntityDef *)g_streamPos; + Load_DynEntityDefArray(1, v37); + v35 = varclipMap_t; + } + if ( v35->dynEntDefList[1] ) + { + v38 = v35->dynEntCount[1]; + g_streamPos = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + varDynEntityDef = (DynEntityDef *)g_streamPos; + v35->dynEntDefList[1] = (DynEntityDef *)g_streamPos; + Load_DynEntityDefArray(1, v38); + v35 = varclipMap_t; + } + DB_PushStreamPos(1u); + if ( v35->dynEntPoseList[0] ) + { + v40 = __ROL4__(v35->dynEntCount[0], 5); + v41 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + g_streamPos = v41; + varDynEntityPose = (DynEntityPose *)v41; + v35->dynEntPoseList[0] = (DynEntityPose *)v41; + Load_Stream(v39, v41, v40); + v35 = varclipMap_t; + } + DB_PopStreamPos(); + DB_PushStreamPos(1u); + if ( v35->dynEntPoseList[1] ) + { + v43 = __ROL4__(v35->dynEntCount[1], 5); + v44 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + g_streamPos = v44; + varDynEntityPose = (DynEntityPose *)v44; + v35->dynEntPoseList[1] = (DynEntityPose *)v44; + Load_Stream(v42, v44, v43); + v35 = varclipMap_t; + } + DB_PopStreamPos(); + DB_PushStreamPos(1u); + if ( v35->dynEntClientList[0] ) + { + v46 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + v47 = 4 * (v35->dynEntCount[0] + __ROL4__(v35->dynEntCount[0], 1)); + g_streamPos = v46; + varDynEntityClient = (DynEntityClient *)v46; + v35->dynEntClientList[0] = (DynEntityClient *)v46; + Load_Stream(v45, v46, v47); + v35 = varclipMap_t; + } + DB_PopStreamPos(); + DB_PushStreamPos(1u); + if ( v35->dynEntClientList[1] ) + { + v49 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + v50 = 4 * (v35->dynEntCount[1] + __ROL4__(v35->dynEntCount[1], 1)); + g_streamPos = v49; + varDynEntityClient = (DynEntityClient *)v49; + v35->dynEntClientList[1] = (DynEntityClient *)v49; + Load_Stream(v48, v49, v50); + v35 = varclipMap_t; + } + DB_PopStreamPos(); + DB_PushStreamPos(1u); + if ( v35->dynEntCollList[0] ) + { + v52 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + v53 = 4 * (v35->dynEntCount[0] + __ROL4__(v35->dynEntCount[0], 2)); + g_streamPos = v52; + varDynEntityColl = (DynEntityColl *)v52; + v35->dynEntCollList[0] = (DynEntityColl *)v52; + Load_Stream(v51, v52, v53); + v35 = varclipMap_t; + } + DB_PopStreamPos(); + DB_PushStreamPos(1u); + if ( v35->dynEntCollList[1] ) + { + v55 = (unsigned __int8 *)((unsigned int)(g_streamPos + 3) & 0xFFFFFFFC); + v56 = 4 * (v35->dynEntCount[1] + __ROL4__(v35->dynEntCount[1], 2)); + g_streamPos = v55; + varDynEntityColl = (DynEntityColl *)v55; + v35->dynEntCollList[1] = (DynEntityColl *)v55; + Load_Stream(v54, v55, v56); + } + DB_PopStreamPos(); + DB_PopStreamPos(); +} + + +// ?Load_FxImpactTable@@YAX_N@Z at 0x822afc40 +FxImpactTable Assets::Load_FxImpactTable(QDataStream *aStream) +{ + FxImpactTable result; + + *aStream + >> result.namePtr + >> result.tablePtr; + + if (result.namePtr == -1) { + result.name = Assets::Load_XStringCustom(aStream); + } + + if (result.tablePtr) + { + result.table = Assets::Load_FxImpactEntryArray(1, 12); + } + DB_PopStreamPos(); +} + + +// ?Load_clipMap_ptr@@YAX_N@Z at 0x822afcd8 +clipMap_t Assets::Load_clipMap_ptr(QDataStream *aStream) +{ + clipMap_t result; + qint32 clipMapPtr; + + *aStream >> clipMapPtr; + + if (clipMapPtr) + { + if (clipMapPtr != -1 || clipMapPtr != -2) + { + result = Assets::Load_clipMap_t(aStream); + } + else + { + // Resolve contents to g_streamBlocks + //*varclipMap_ptr = *(clipMap_t **)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + // + (((unsigned int)(v1 - 1) >> 26) & 0x38)))[(v1 - 1) & 0x1FFFFFFF]; + } + } +} + + +// ?Load_FxImpactTablePtr@@YAX_N@Z at 0x822afdc0 +FxImpactTable Assets::Load_FxImpactTablePtr(QDataStream *aStream) +{ + FxImpactTable result; + qint32 fxImpactTablePtr; + + *aStream >> fxImpactTablePtr; + + if (fxImpactTablePtr) + { + if (fxImpactTablePtr == -1 || fxImpactTablePtr != -2) + { + result = Assets::Load_FxImpactTable(aStream); + } + else + { + // Resolve contents to g_streamBlocks + //*varFxImpactTablePtr = *(FxImpactTable **)&(*(unsigned __int8 **)((char *)&g_streamBlocks->data + // + (((unsigned int)(v1 - 1) >> 26) & 0x38)))[(v1 - 1) & 0x1FFFFFFF]; + } + } + + return result; +} + + +struct XAsset +{ + XAssetType type; + XAssetHeader header; +}; + +// ?Load_XAssetHeader@@YAX_N@Z at 0x822afea8 +XAssetHeader Assets::Load_XAssetHeader(QDataStream *aStream, XAsset aAsset) +{ + XAssetHeader result; + + switch (aAsset.type) + { + case ASSET_TYPE_PHYSPRESET: + result = Assets::Load_PhysPresetPtr(aStream); + break; + case ASSET_TYPE_XANIMPARTS: + result = Assets::Load_XAnimPartsPtr(aStream); + break; + case ASSET_TYPE_XMODEL: + result = Assets::Load_XModelPtr(aStream); + break; + case ASSET_TYPE_MATERIAL: + result = Assets::Load_MaterialHandle(aStream); + break; + case ASSET_TYPE_PIXELSHADER: + result = Assets::Load_MaterialPixelShaderPtr(aStream); + break; + case ASSET_TYPE_TECHNIQUE_SET: + result = Assets::Load_MaterialTechniqueSetPtr(aStream); + break; + case ASSET_TYPE_IMAGE: + varGfxImagePtr = (GfxImage **)varXAssetHeader; + result = Assets::Load_GfxImagePtr(aStream); + break; + case ASSET_TYPE_SOUND: + result = Assets::Load_snd_alias_list_ptr(aStream); + break; + case ASSET_TYPE_SOUND_CURVE: + result = Assets::Load_SndCurvePtr(aStream); + break; + case ASSET_TYPE_LOADED_SOUND: + result = Assets::Load_LoadedSoundPtr(aStream); + break; + case ASSET_TYPE_CLIPMAP: + case ASSET_TYPE_CLIPMAP_PVS: + varclipMap_ptr = (clipMap_t **)varXAssetHeader; + result = Assets::Load_clipMap_ptr(aStream); + break; + case ASSET_TYPE_COMWORLD: + result = Assets::Load_ComWorldPtr(aStream); + break; + case ASSET_TYPE_GAMEWORLD_SP: + result = Assets::Load_GameWorldSpPtr(aStream); + break; + case ASSET_TYPE_GAMEWORLD_MP: + result = Assets::Load_GameWorldMpPtr(aStream); + break; + case ASSET_TYPE_MAP_ENTS: + result = Assets::Load_MapEntsPtr(aStream); + break; + case ASSET_TYPE_GFXWORLD: + result = Assets::Load_GfxWorldPtr(aStream); + break; + case ASSET_TYPE_LIGHT_DEF: + result = Assets::Load_GfxLightDefPtr(aStream); + break; + case ASSET_TYPE_FONT: + result = Assets::Load_FontHandle(aStream); + break; + case ASSET_TYPE_MENULIST: + result = Assets::Load_MenuListPtr(aStream); + break; + case ASSET_TYPE_MENU: + result = Assets::Load_menuDef_ptr(aStream); + break; + case ASSET_TYPE_LOCALIZE_ENTRY: + result = Assets::Load_LocalizeEntryPtr(aStream); + break; + case ASSET_TYPE_WEAPON: + result = Assets::Load_WeaponDefPtr(aStream); + break; + case ASSET_TYPE_SNDDRIVER_GLOBALS: + result = Assets::Load_SndDriverGlobalsPtr(aStream); + break; + case ASSET_TYPE_FX: + result = Assets::Load_FxEffectDefHandle(aStream); + break; + case ASSET_TYPE_IMPACT_FX: + result = Assets::Load_FxImpactTablePtr(aStream); + break; + case ASSET_TYPE_RAWFILE: + result = Assets::Load_RawFilePtr(aStream); + break; + case ASSET_TYPE_STRINGTABLE: + result = Assets::Load_StringTablePtr(aStream); + break; + } + + return result; +} + +// ?Load_XAsset@@YAX_N@Z at 0x822b0220 +XAsset Assets::Load_XAsset(QDataStream *aStream) +{ + XAsset result; + + *aStream + >> result.type + >> result.header + + result.header = Load_XAssetHeader(aStream, result); + + return result; +} + + diff --git a/libs/assets/assets.h b/libs/assets/assets.h index 5100159..a133cd7 100644 --- a/libs/assets/assets.h +++ b/libs/assets/assets.h @@ -1,200 +1,3219 @@ #ifndef ASSETS_H #define ASSETS_H -#include "animparts.h" #include "model.h" -#include "material.h" -#include "materialpixelshader.h" -#include "materialtechset.h" -#include "gfximage.h" -#include "soundalias.h" -#include "soundcurve.h" -#include "loadedsound.h" -#include "clipmap.h" -#include "comworld.h" -#include "gameworld.h" -#include "mapent.h" -#include "gfxworld.h" -#include "gfxlightdef.h" -#include "gfximage.h" -#include "font.h" -#include "menulist.h" -#include "menudef.h" -#include "localizeentry.h" -#include "weapondef.h" -#include "sounddriver.h" -#include "effectdef.h" -#include "effecttable.h" -#include "rawfile.h" -#include "stringtable.h" - #include #include -struct AssetMap { - QVector> animations; - QVector> models; - QVector> materials; - QVector> pixelShaders; - QVector> techSets; - QVector> gfxWorlds; - QVector> gfxLightDefs; - QVector> images; - QVector> sounds; - QVector> soundCurves; - QVector> loadedSounds; - QVector> clipMaps; - QVector> comWorlds; - QVector> gameWorldSPs; - QVector> gameWorldMPs; - QVector> mapEntities; - QVector> fonts; - QVector> menuLists; - QVector> menuDefinitions; - QVector> localizeEntries; - QVector> weaponDefinitions; - QVector> soundDrivers; - QVector> effectDefinitions; - QVector> impactTables; - QVector> rawFiles; - QVector> stringTables; +typedef quint32 _DWORD; + + +enum _D3DRESOURCETYPE : __int32 +{ + D3DRTYPE_NONE = 0x0, + D3DRTYPE_VERTEXBUFFER = 0x1, + D3DRTYPE_INDEXBUFFER = 0x2, + D3DRTYPE_TEXTURE = 0x3, + D3DRTYPE_SURFACE = 0x4, + D3DRTYPE_VERTEXDECLARATION = 0x5, + D3DRTYPE_VERTEXSHADER = 0x6, + D3DRTYPE_PIXELSHADER = 0x7, + D3DRTYPE_CONSTANTBUFFER = 0x8, + D3DRTYPE_COMMANDBUFFER = 0x9, + D3DRTYPE_VOLUME = 0x10, + D3DRTYPE_VOLUMETEXTURE = 0x11, + D3DRTYPE_CUBETEXTURE = 0x12, + D3DRTYPE_ARRAYTEXTURE = 0x13, + D3DRTYPE_LINETEXTURE = 0x14, + D3DRTYPE_FORCE_DWORD = 0x7FFFFFFF, +}; + +enum _D3DFORMAT : __int32 +{ + D3DFMT_DXT1 = 0x1A200152, + D3DFMT_LIN_DXT1 = 0x1A200052, + D3DFMT_DXT2 = 0x1A200153, + D3DFMT_LIN_DXT2 = 0x1A200053, + D3DFMT_DXT3 = 0x1A200153, + D3DFMT_LIN_DXT3 = 0x1A200053, + D3DFMT_DXT3A = 0x1A20017A, + D3DFMT_LIN_DXT3A = 0x1A20007A, + D3DFMT_DXT3A_1111 = 0x1A20017D, + D3DFMT_LIN_DXT3A_1111 = 0x1A20007D, + D3DFMT_DXT4 = 0x1A200154, + D3DFMT_LIN_DXT4 = 0x1A200054, + D3DFMT_DXT5 = 0x1A200154, + D3DFMT_LIN_DXT5 = 0x1A200054, + D3DFMT_DXT5A = 0x1A20017B, + D3DFMT_LIN_DXT5A = 0x1A20007B, + D3DFMT_DXN = 0x1A200171, + D3DFMT_LIN_DXN = 0x1A200071, + D3DFMT_CTX1 = 0x1A20017C, + D3DFMT_LIN_CTX1 = 0x1A20007C, + D3DFMT_A8 = 0x4900102, + D3DFMT_LIN_A8 = 0x4900002, + D3DFMT_L8 = 0x28000102, + D3DFMT_LIN_L8 = 0x28000002, + D3DFMT_R5G6B5 = 0x28280144, + D3DFMT_LIN_R5G6B5 = 0x28280044, + D3DFMT_R6G5B5 = 0x28280145, + D3DFMT_LIN_R6G5B5 = 0x28280045, + D3DFMT_L6V5U5 = 0x2A200B45, + D3DFMT_LIN_L6V5U5 = 0x2A200A45, + D3DFMT_X1R5G5B5 = 0x28280143, + D3DFMT_LIN_X1R5G5B5 = 0x28280043, + D3DFMT_A1R5G5B5 = 0x18280143, + D3DFMT_LIN_A1R5G5B5 = 0x18280043, + D3DFMT_A4R4G4B4 = 0x1828014F, + D3DFMT_LIN_A4R4G4B4 = 0x1828004F, + D3DFMT_X4R4G4B4 = 0x2828014F, + D3DFMT_LIN_X4R4G4B4 = 0x2828004F, + D3DFMT_Q4W4V4U4 = 0x1A20AB4F, + D3DFMT_LIN_Q4W4V4U4 = 0x1A20AA4F, + D3DFMT_A8L8 = 0x800014A, + D3DFMT_LIN_A8L8 = 0x800004A, + D3DFMT_G8R8 = 0x2D20014A, + D3DFMT_LIN_G8R8 = 0x2D20004A, + D3DFMT_V8U8 = 0x2D20AB4A, + D3DFMT_LIN_V8U8 = 0x2D20AA4A, + D3DFMT_D16 = 0x1A220158, + D3DFMT_LIN_D16 = 0x1A220058, + D3DFMT_L16 = 0x28000158, + D3DFMT_LIN_L16 = 0x28000058, + D3DFMT_R16F = 0x2DA2AB5E, + D3DFMT_LIN_R16F = 0x2DA2AA5E, + D3DFMT_R16F_EXPAND = 0x2DA2AB5B, + D3DFMT_LIN_R16F_EXPAND = 0x2DA2AA5B, + D3DFMT_UYVY = 0x1A20014C, + D3DFMT_LIN_UYVY = 0x1A20004C, + D3DFMT_LE_UYVY = 0x1A20010C, + D3DFMT_LE_LIN_UYVY = 0x1A20000C, + D3DFMT_G8R8_G8B8 = 0x1828014C, + D3DFMT_LIN_G8R8_G8B8 = 0x1828004C, + D3DFMT_R8G8_B8G8 = 0x1828014B, + D3DFMT_LIN_R8G8_B8G8 = 0x1828004B, + D3DFMT_YUY2 = 0x1A20014B, + D3DFMT_LIN_YUY2 = 0x1A20004B, + D3DFMT_LE_YUY2 = 0x1A20010B, + D3DFMT_LE_LIN_YUY2 = 0x1A20000B, + D3DFMT_A8R8G8B8 = 0x18280186, + D3DFMT_LIN_A8R8G8B8 = 0x18280086, + D3DFMT_X8R8G8B8 = 0x28280186, + D3DFMT_LIN_X8R8G8B8 = 0x28280086, + D3DFMT_A8B8G8R8 = 0x1A200186, + D3DFMT_LIN_A8B8G8R8 = 0x1A200086, + D3DFMT_X8B8G8R8 = 0x2A200186, + D3DFMT_LIN_X8B8G8R8 = 0x2A200086, + D3DFMT_X8L8V8U8 = 0x2A200B86, + D3DFMT_LIN_X8L8V8U8 = 0x2A200A86, + D3DFMT_Q8W8V8U8 = 0x1A20AB86, + D3DFMT_LIN_Q8W8V8U8 = 0x1A20AA86, + D3DFMT_A2R10G10B10 = 0x182801B6, + D3DFMT_LIN_A2R10G10B10 = 0x182800B6, + D3DFMT_X2R10G10B10 = 0x282801B6, + D3DFMT_LIN_X2R10G10B10 = 0x282800B6, + D3DFMT_A2B10G10R10 = 0x1A2001B6, + D3DFMT_LIN_A2B10G10R10 = 0x1A2000B6, + D3DFMT_A2W10V10U10 = 0x1A202BB6, + D3DFMT_LIN_A2W10V10U10 = 0x1A202AB6, + D3DFMT_A16L16 = 0x8000199, + D3DFMT_LIN_A16L16 = 0x8000099, + D3DFMT_G16R16 = 0x2D200199, + D3DFMT_LIN_G16R16 = 0x2D200099, + D3DFMT_V16U16 = 0x2D20AB99, + D3DFMT_LIN_V16U16 = 0x2D20AA99, + D3DFMT_R10G11B11 = 0x282801B7, + D3DFMT_LIN_R10G11B11 = 0x282800B7, + D3DFMT_R11G11B10 = 0x282801B8, + D3DFMT_LIN_R11G11B10 = 0x282800B8, + D3DFMT_W10V11U11 = 0x2A20ABB7, + D3DFMT_LIN_W10V11U11 = 0x2A20AAB7, + D3DFMT_W11V11U10 = 0x2A20ABB8, + D3DFMT_LIN_W11V11U10 = 0x2A20AAB8, + D3DFMT_G16R16F = 0x2D22AB9F, + D3DFMT_LIN_G16R16F = 0x2D22AA9F, + D3DFMT_G16R16F_EXPAND = 0x2D22AB9C, + D3DFMT_LIN_G16R16F_EXPAND = 0x2D22AA9C, + D3DFMT_L32 = 0x280001A1, + D3DFMT_LIN_L32 = 0x280000A1, + D3DFMT_R32F = 0x2DA2ABA4, + D3DFMT_LIN_R32F = 0x2DA2AAA4, + D3DFMT_D24S8 = 0x2D200196, + D3DFMT_LIN_D24S8 = 0x2D200096, + D3DFMT_D24X8 = 0x2DA00196, + D3DFMT_LIN_D24X8 = 0x2DA00096, + D3DFMT_D24FS8 = 0x1A220197, + D3DFMT_LIN_D24FS8 = 0x1A220097, + D3DFMT_D32 = 0x1A2201A1, + D3DFMT_LIN_D32 = 0x1A2200A1, + D3DFMT_A16B16G16R16 = 0x1A20015A, + D3DFMT_LIN_A16B16G16R16 = 0x1A20005A, + D3DFMT_Q16W16V16U16 = 0x1A20AB5A, + D3DFMT_LIN_Q16W16V16U16 = 0x1A20AA5A, + D3DFMT_A16B16G16R16F = 0x1A22AB60, + D3DFMT_LIN_A16B16G16R16F = 0x1A22AA60, + D3DFMT_A16B16G16R16F_EXPAND = 0x1A22AB5D, + D3DFMT_LIN_A16B16G16R16F_EXPAND = 0x1A22AA5D, + D3DFMT_A32L32 = 0x80001A2, + D3DFMT_LIN_A32L32 = 0x80000A2, + D3DFMT_G32R32 = 0x2D2001A2, + D3DFMT_LIN_G32R32 = 0x2D2000A2, + D3DFMT_V32U32 = 0x2D20ABA2, + D3DFMT_LIN_V32U32 = 0x2D20AAA2, + D3DFMT_G32R32F = 0x2D22ABA5, + D3DFMT_LIN_G32R32F = 0x2D22AAA5, + D3DFMT_A32B32G32R32 = 0x1A2001A3, + D3DFMT_LIN_A32B32G32R32 = 0x1A2000A3, + D3DFMT_Q32W32V32U32 = 0x1A20ABA3, + D3DFMT_LIN_Q32W32V32U32 = 0x1A20AAA3, + D3DFMT_A32B32G32R32F = 0x1A22ABA6, + D3DFMT_LIN_A32B32G32R32F = 0x1A22AAA6, + D3DFMT_A2B10G10R10F_EDRAM = 0x1A2201BF, + D3DFMT_G16R16_EDRAM = 0x2D20AB8D, + D3DFMT_A16B16G16R16_EDRAM = 0x1A20AB55, + D3DFMT_LE_X8R8G8B8 = 0x28280106, + D3DFMT_LE_A8R8G8B8 = 0x18280106, + D3DFMT_LE_X2R10G10B10 = 0x28280136, + D3DFMT_LE_A2R10G10B10 = 0x18280136, + D3DFMT_INDEX16 = 0x1, + D3DFMT_INDEX32 = 0x6, + D3DFMT_LE_INDEX16 = 0x0, + D3DFMT_LE_INDEX32 = 0x4, + D3DFMT_VERTEXDATA = 0x8, + //D3DFMT_UNKNOWN = 0xFFFFFFFF, + D3DFMT_FORCE_DWORD = 0x7FFFFFFF, +}; + +enum _D3DMULTISAMPLE_TYPE : __int32 +{ + D3DMULTISAMPLE_NONE = 0x0, + D3DMULTISAMPLE_2_SAMPLES = 0x1, + D3DMULTISAMPLE_4_SAMPLES = 0x2, + D3DMULTISAMPLE_FORCE_DWORD = 0x7FFFFFFF, +}; + +struct _XGTEXTURE_DESC +{ + _D3DRESOURCETYPE ResourceType; + uint Width; + uint Height; + uint Depth; + _D3DFORMAT Format; + uint RowPitch; + uint SlicePitch; + uint BitsPerPixel; + uint WidthInBlocks; + uint HeightInBlocks; + uint DepthInBlocks; + uint BytesPerBlock; + int ExpBias; + uint Flags; + _D3DMULTISAMPLE_TYPE MultiSampleType; +}; + +struct GfxImageLoadDef; + +struct GfxTexture +{ + qint32 basemapPtr; + D3DBaseTexture *basemap; + qint32 mapPtr; + D3DTexture *map; + qint32 volmapPtr; + D3DVolumeTexture *volmap; + qint32 cubemapPtr; + D3DCubeTexture *cubemap; + qint32 loadDefPtr; + GfxImageLoadDef *loadDef; +}; + +struct GfxImageLoadDef +{ + quint8 levelCount; + quint8 flags; + qint16 dimensions[3]; + int format; + GfxTexture texture; +}; + +struct CardMemory +{ + int platform[1]; +}; + +struct GfxImage +{ + MapType mapType; + GfxTexture texture; + quint8 semantic; + CardMemory cardMemory; + quint16 width; + quint16 height; + quint16 depth; + quint8 category; + bool delayLoadPixels; + qint32 pixelsPtr; + QVector pixels; + uint baseSize; + quint16 streamSlot; + bool streaming; + qint32 namePtr; + QString name; +}; + + +union MaterialPixelShaderProgram +{ + qint32 psPtr; + D3DPixelShader ps; + GfxPixelShaderLoadDef loadDef; +}; + +struct stream_source_info_t +{ + quint16 Stream; + quint16 Offset; + uint Type; +}; + +struct __declspec(align(4)) XMALOOPREGION +{ + uint LoopStart; + uint LoopEnd; + quint8 LoopSubframeEnd; + quint8 LoopSubframeSkip; +}; + +struct XAUDIOPACKET_ALIGNED +{ + qint32 pBufferPtr; + QVector pBuffer; + uint BufferSize; + uint LoopCount; + XMALOOPREGION XMALoop[6]; + qint32 pContextPtr; + char pContext; +}; + +struct __declspec(align(4)) XAUDIOXMAFORMAT +{ + uint SampleRate; + quint8 ChannelCount; + quint8 DecodeBufferSize; +}; + +union $A914CD29B804E77ACE08D070A31DB5AB +{ + quint8 NumStreams; + quint8 ChannelCount; +}; + +union $9C5A25260C9CC66355FE8A35CC8403E0 +{ + XAUDIOXMAFORMAT Stream[6]; + uint SampleRate; +}; + +struct XAUDIOSOURCEFORMAT +{ + quint8 SampleType; + __declspec(align(4)) $A914CD29B804E77ACE08D070A31DB5AB ___u1; + $9C5A25260C9CC66355FE8A35CC8403E0 ___u2; +}; + +struct XaIwXmaDataInfo +{ + int totalMsec; +}; + +struct XaSeekTable +{ + int size; + qint32 dataPtr; + QVector data; +}; + +struct XaSound +{ + XAUDIOPACKET_ALIGNED packet; + XAUDIOSOURCEFORMAT format; + XaIwXmaDataInfo xaIwXmaDataInfo; + XaSeekTable seekTable; +}; + +struct LoadedSound +{ + const char *name; + XaSound sound; +}; + +struct StreamFileNameRaw +{ + qint32 dirPtr; + QString dir; + qint32 namePtr; + QString name; +}; + +struct StreamFileNamePacked +{ + uint offset; + uint length; +}; + +union StreamFileInfo +{ + StreamFileNameRaw raw; + StreamFileNamePacked packed; +}; + +struct StreamFileName +{ + uint fileIndex; + StreamFileInfo info; +}; + +struct StreamedSound +{ + StreamFileName filename; +}; + +union SoundFileRef +{ + LoadedSound *loadSnd; + StreamedSound streamSnd; +}; + +struct SoundFile +{ + quint8 type; + quint8 exists; + SoundFileRef u; +}; + +struct SndCurve +{ + qint32 filenamePtr; + QString filename; + int knotCount; + float knots[8][2]; +}; + +struct XAUDIOCHANNELMAPENTRY +{ + quint8 InputChannel; + quint8 OutputChannel; + float Volume; +}; + +struct XAUDIOCHANNELMAP +{ + quint8 EntryCount; + qint32 paEntriesPtr; + QVector paEntries; +}; + +struct SpeakerMap +{ + bool isDefault; + const char *name; + XAUDIOCHANNELMAP channelMaps[2][2]; +}; + +struct snd_alias_t +{ + const char *aliasName; + const char *subtitle; + const char *secondaryAliasName; + const char *chainAliasName; + SoundFile *soundFile; + int sequence; + float volMin; + float volMax; + float pitchMin; + float pitchMax; + float distMin; + float distMax; + int flags; + float slavePercentage; + float probability; + float lfePercentage; + float centerPercentage; + int startDelay; + SndCurve *volumeFalloffCurve; + float envelopMin; + float envelopMax; + float envelopPercentage; + SpeakerMap *speakerMap; +}; + +struct SoundAliasList +{ + const char *aliasName; + snd_alias_t *head; + int count; +}; + +enum XAssetType : __int32 +{ + ASSET_TYPE_XMODELPIECES = 0x0, + ASSET_TYPE_PHYSPRESET = 0x1, + ASSET_TYPE_XANIMPARTS = 0x2, + ASSET_TYPE_XMODEL = 0x3, + ASSET_TYPE_MATERIAL = 0x4, + ASSET_TYPE_PIXELSHADER = 0x5, + ASSET_TYPE_TECHNIQUE_SET = 0x6, + ASSET_TYPE_IMAGE = 0x7, + ASSET_TYPE_SOUND = 0x8, + ASSET_TYPE_SOUND_CURVE = 0x9, + ASSET_TYPE_LOADED_SOUND = 0xA, + ASSET_TYPE_CLIPMAP = 0xB, + ASSET_TYPE_CLIPMAP_PVS = 0xC, + ASSET_TYPE_COMWORLD = 0xD, + ASSET_TYPE_GAMEWORLD_SP = 0xE, + ASSET_TYPE_GAMEWORLD_MP = 0xF, + ASSET_TYPE_MAP_ENTS = 0x10, + ASSET_TYPE_GFXWORLD = 0x11, + ASSET_TYPE_LIGHT_DEF = 0x12, + ASSET_TYPE_UI_MAP = 0x13, + ASSET_TYPE_FONT = 0x14, + ASSET_TYPE_MENULIST = 0x15, + ASSET_TYPE_MENU = 0x16, + ASSET_TYPE_LOCALIZE_ENTRY = 0x17, + ASSET_TYPE_WEAPON = 0x18, + ASSET_TYPE_SNDDRIVER_GLOBALS = 0x19, + ASSET_TYPE_FX = 0x1A, + ASSET_TYPE_IMPACT_FX = 0x1B, + ASSET_TYPE_AITYPE = 0x1C, + ASSET_TYPE_MPTYPE = 0x1D, + ASSET_TYPE_CHARACTER = 0x1E, + ASSET_TYPE_XMODELALIAS = 0x1F, + ASSET_TYPE_RAWFILE = 0x20, + ASSET_TYPE_STRINGTABLE = 0x21, + ASSET_TYPE_COUNT = 0x22, + ASSET_TYPE_STRING = 0x22, + ASSET_TYPE_ASSETLIST = 0x23, +}; + + +union GfxDrawSurf +{ + GfxDrawSurfFields fields; + unsigned __int64 packed; +}; + +struct MaterialTechniqueSet +{ + const char *name; + quint8 worldVertFormat; + quint8 unused[2]; + MaterialTechniqueSet *remappedTechniqueSet; + MaterialTechnique *techniques[26]; +}; + +struct XModel +{ + const char *name; + quint8 numBones; + quint8 numRootBones; + quint8 numsurfs; + quint8 lodRampType; + quint16 *boneNames; + quint8 *parentList; + qint16 *quats; + float *trans; + quint8 *partClassification; + DObjAnimMat *baseMat; + XSurface *surfs; + Material **materialHandles; + XModelLodInfo lodInfo[4]; + XModelCollSurf *collSurfs; + int numCollSurfs; + int contents; + XBoneInfo *boneInfo; + float radius; + float mins[3]; + float maxs[3]; + qint16 numLods; + qint16 collLod; + XModelStreamInfo streamInfo; + int memUsage; + quint8 flags; + PhysPreset *physPreset; + PhysGeomList *physGeoms; +}; + +struct XModelPiece +{ + XModel *model; + float offset[3]; +}; + +struct XModelPieces +{ + const char *name; + int numpieces; + XModelPiece *pieces; +}; + +union XAnimIndices +{ + quint8 *_1; + quint16 *_2; + void *data; +}; + +struct XAnimNotifyInfo +{ + quint16 name; + float time; +}; + +union XAnimDynamicFrames +{ + quint8 (*_1)[3]; + quint16 (*_2)[3]; +}; + +union XAnimDynamicIndices +{ + quint8 _1[1]; + quint16 _2[1]; +}; + +struct XAnimPartTransFrames +{ + float mins[3]; + float size[3]; + XAnimDynamicFrames frames; + XAnimDynamicIndices indices; +}; + +union XAnimPartTransData +{ + XAnimPartTransFrames frames; + float frame0[3]; +}; + +struct XAnimPartTrans +{ + quint16 size; + quint8 smallTrans; + XAnimPartTransData u; +}; + +struct __declspec(align(4)) XAnimDeltaPartQuatDataFrames +{ + qint16 (*frames)[2]; + XAnimDynamicIndices indices; +}; + +union XAnimDeltaPartQuatData +{ + XAnimDeltaPartQuatDataFrames frames; + qint16 frame0[2]; +}; + +struct XAnimDeltaPartQuat +{ + quint16 size; + XAnimDeltaPartQuatData u; +}; + +struct XAnimDeltaPart +{ + XAnimPartTrans *trans; + XAnimDeltaPartQuat *quat; +}; + +struct XAnimParts +{ + const char *name; + quint16 dataByteCount; + quint16 dataShortCount; + quint16 dataIntCount; + quint16 randomDataByteCount; + quint16 randomDataIntCount; + quint16 numframes; + bool bLoop; + bool bDelta; + quint8 boneCount[12]; + quint8 notifyCount; + quint8 assetType; + bool pad; + uint randomDataShortCount; + uint indexCount; + float framerate; + float frequency; + quint16 *names; + quint8 *dataByte; + qint16 *dataShort; + int *dataInt; + qint16 *randomDataShort; + quint8 *randomDataByte; + int *randomDataInt; + XAnimIndices indices; + XAnimNotifyInfo *notify; + XAnimDeltaPart *deltaPart; +}; + +struct cStaticModelWritable +{ + quint16 nextModelInWorldSector; +}; + +struct cStaticModel_s +{ + cStaticModelWritable writable; + XModel *xmodel; + float origin[3]; + float invScaledAxis[3][3]; + float absmin[3]; + float absmax[3]; +}; + +struct dmaterial_t +{ + char material[64]; + int surfaceFlags; + int contentFlags; +}; + +struct cNode_t +{ + qint32 planePtr; + CPlane plane; + qint16 children[2]; +}; + +struct __declspec(align(4)) CLeaf +{ + quint16 firstCollAabbIndex; + quint16 collAabbCount; + int brushContents; + int terrainContents; + float mins[3]; + float maxs[3]; + int leafBrushNode; + qint16 cluster; +}; + +struct CLeafBrushNodeLeaf; +struct CLeafBrushNodeChildren; + +struct CLeafBrushNodeData +{ + // Make these not ptrs + CLeafBrushNodeLeaf *leaf; + CLeafBrushNodeChildren *children; +}; + +struct CLeafBrushNodeLeaf : CLeafBrushNodeData +{ + qint32 brushesPtr; + QVector brushes; +}; + +struct CLeafBrushNodeChildren : CLeafBrushNodeData +{ + float dist; + float range; + quint16 childOffset[2]; +}; + +struct CLeafBrushNode +{ + quint8 axis; + qint16 leafBrushCount; + int contents; + CLeafBrushNodeData data; +}; + +struct CollisionBorder +{ + float distEq[3]; + float zBase; + float zSlope; + float start; + float length; +}; + +struct CollisionPartition +{ + quint8 triCount; + quint8 borderCount; + int firstTri; + qint32 bordersPtr; + CollisionBorder borders; +}; + +union CollisionAabbTreeIndex +{ + int firstChildIndex; + int partitionIndex; +}; + +struct CollisionAabbTree +{ + float origin[3]; + float halfSize[3]; + quint16 materialIndex; + quint16 childCount; + CollisionAabbTreeIndex u; +}; + +struct CModel +{ + float mins[3]; + float maxs[3]; + float radius; + CLeaf leaf; +}; + +struct CBrush +{ + float mins[3]; + int contents; + float maxs[3]; + uint numsides; + qint32 sidesPtr; + QVector sides; + qint16 axialMaterialNum[2][3]; + qint32 baseAdjacentSidePtr; + quint8 baseAdjacentSide; + qint16 firstAdjacentSideOffsets[2][3]; + quint8 edgeCount[2][3]; +}; + +struct MapEnts +{ + qint32 namePtr; + QString name; + qint32 entityStringPtr; + QString entityString; + int numEntityChars; +}; + +enum DynEntityType : __int32 +{ + DYNENT_TYPE_INVALID = 0x0, + DYNENT_TYPE_CLUTTER = 0x1, + DYNENT_TYPE_DESTRUCT = 0x2, + DYNENT_TYPE_COUNT = 0x3, +}; + +struct GfxPlacement +{ + float quat[4]; + float origin[3]; +}; + +struct FxSpawnDefLooping +{ + int intervalMsec; + int count; +}; + +struct FxIntRange +{ + int base; + int amplitude; +}; + +struct FxSpawnDefOneShot +{ + FxIntRange count; +}; + +union FxSpawnDef +{ + FxSpawnDefLooping looping; + FxSpawnDefOneShot oneShot; +}; + +struct FxFloatRange +{ + float base; + float amplitude; +}; + +struct FxElemAtlas +{ + quint8 behavior; + quint8 index; + quint8 fps; + quint8 loopCount; + quint8 colIndexBits; + quint8 rowIndexBits; + qint16 entryCount; +}; + +struct FxElemVec3Range +{ + float base[3]; + float amplitude[3]; +}; + +struct FxElemVelStateInFrame +{ + FxElemVec3Range velocity; + FxElemVec3Range totalDelta; +}; + +struct FxElemVelStateSample +{ + FxElemVelStateInFrame local; + FxElemVelStateInFrame world; +}; + +struct FxElemVisualState +{ + quint8 color[4]; + float rotationDelta; + float rotationTotal; + float size[2]; + float scale; +}; + +struct FxElemVisStateSample +{ + FxElemVisualState base; + FxElemVisualState amplitude; +}; + +struct FxElemMarkVisuals +{ + Material *materials[2]; +}; + +struct FxEffectDef; + +union FxEffectDefRef +{ + qint32 namePtr; +}; + +union FxElemVisuals +{ + const void *anonymous; + Material *material; + XModel *model; + FxEffectDefRef effectDef; + const char *soundName; +}; + +union FxElemDefVisuals +{ + FxElemMarkVisuals *markArray; + FxElemVisuals *array; + FxElemVisuals instance; +}; + +struct FxTrailVertex +{ + float pos[2]; + float normal[2]; + float texCoord; +}; + +struct FxTrailDef +{ + int scrollTimeMsec; + int repeatDist; + int splitDist; + + int vertCount; + qint32 vertsPtr; + QVector verts; + + int indCount; + qint32 indsPtr; + QVector inds; +}; + +struct FxElemDef +{ + int flags; + FxSpawnDef spawn; + FxFloatRange spawnRange; + FxFloatRange fadeInRange; + FxFloatRange fadeOutRange; + float spawnFrustumCullRadius; + FxIntRange spawnDelayMsec; + FxIntRange lifeSpanMsec; + FxFloatRange spawnOrigin[3]; + FxFloatRange spawnOffsetRadius; + FxFloatRange spawnOffsetHeight; + FxFloatRange spawnAngles[3]; + FxFloatRange angularVelocity[3]; + FxFloatRange initialRotation; + FxFloatRange gravity; + FxFloatRange reflectionFactor; + FxElemAtlas atlas; + quint8 elemType; + quint8 visualCount; + quint8 velIntervalCount; + quint8 visStateIntervalCount; + const FxElemVelStateSample *velSamples; + const FxElemVisStateSample *visSamples; + FxElemDefVisuals visuals; + float collMins[3]; + float collMaxs[3]; + FxEffectDefRef effectOnImpact; + FxEffectDefRef effectOnDeath; + FxEffectDefRef effectEmitted; + FxFloatRange emitDist; + FxFloatRange emitDistVariance; + FxTrailDef *trailDef; + quint8 sortOrder; + quint8 lightingFrac; + quint8 useItemClip; + quint8 unused[1]; +}; + +struct FxEffectDef +{ + qint32 namePtr; + QString name; + int flags; + int totalSize; + int msecLoopingLife; + int elemDefCountLooping; + int elemDefCountOneShot; + int elemDefCountEmission; + qint32 elemDefsPtr; + QVector elemDefs; +}; + +struct DynEntityDef +{ + DynEntityType type; + GfxPlacement pose; + qint32 xModelPtr; + XModel xModel; + quint16 brushModel; + quint16 physicsBrushModel; + qint32 destroyFxPtr; + FxEffectDef destroyFx; + qint32 destroyPiecesPtr; + XModelPieces destroyPieces; + qint32 physPresetPtr; + PhysPreset physPreset; + int health; + PhysMass mass; + int contents; +}; + +struct DynEntityPose +{ + GfxPlacement pose; + float radius; +}; + +struct DynEntityClient +{ + int physObjId; + quint16 flags; + quint16 lightingHandle; + int health; +}; + +struct DynEntityColl +{ + quint16 sector; + quint16 nextEntInSector; + float linkMins[2]; + float linkMaxs[2]; +}; + +struct clipMap_t +{ + qint32 namePtr; + QString name; + + int isInUse; + + int planeCount; + qint32 planesPtr; + QVector planes; + + uint numStaticModels; + qint32 staticModelListPtr; + QVector staticModelList; + + uint numMaterials; + qint32 materialsPtr; + QVector materials; + + uint numBrushSides; + qint32 brushsidesPtr; + QVector brushsides; + + uint numBrushEdges; + qint32 brushEdgesPtr; + QVector brushEdges; + + uint numNodes; + qint32 nodesPtr; + QVector nodes; + + uint numLeafs; + qint32 leafsPtr; + QVector leafs; + + uint leafbrushNodesCount; + qint32 leafbrushNodesPtr; + QVector leafbrushNodes; + + uint numLeafBrushes; + qint32 leafbrushesPtr; + QVector leafbrushes; + + uint numLeafSurfaces; + qint32 leafsurfacesPtr; + QVector leafsurfaces; + + uint vertCount; + float (*verts)[3]; + + int triCount; + qint32 triIndicesPtr; + QVector triIndices; + qint32 triEdgeIsWalkablePtr; + QVector triEdgeIsWalkable; + + int borderCount; + qint32 bordersPtr; + QVector borders; + + int partitionCount; + qint32 partitionsPtr; + QVector partitions; + + int aabbTreeCount; + qint32 aabbTreesPtr; + QVector aabbTrees; + + uint numSubModels; + qint32 cmodelsPtr; + QVector cmodels; + + quint16 numBrushes; + qint32 brushesPtr; + QVector brushes; + + int numClusters; + int clusterBytes; + + qint32 visibilityPtr; + QVector visibility; + int vised; + QVector mapEnts; + CBrush *box_brush; + CModel box_model; + quint16 dynEntCount[2]; + DynEntityDef *dynEntDefList[2]; + DynEntityPose *dynEntPoseList[2]; + DynEntityClient *dynEntClientList[2]; + DynEntityColl *dynEntCollList[2]; + uint checksum; +}; + +struct ComPrimaryLight +{ + quint8 type; + quint8 canUseShadowMap; + quint8 exponent; + quint8 unused; + float color[3]; + float dir[3]; + float origin[3]; + float radius; + float cosHalfFovOuter; + float cosHalfFovInner; + float cosHalfFovExpanded; + float rotationLimit; + float translationLimit; + qint32 defNamePtr; + QString defName; +}; + +struct ComWorld +{ + qint32 namePtr; + QString name; + int isInUse; + uint primaryLightCount; + qint32 primaryLightsPtr; + QVector primaryLights; +}; + +enum nodeType : qint32 +{ + NODE_BADNODE = 0x0, + NODE_PATHNODE = 0x1, + NODE_COVER_STAND = 0x2, + NODE_COVER_CROUCH = 0x3, + NODE_COVER_CROUCH_WINDOW = 0x4, + NODE_COVER_PRONE = 0x5, + NODE_COVER_RIGHT = 0x6, + NODE_COVER_LEFT = 0x7, + NODE_COVER_WIDE_RIGHT = 0x8, + NODE_COVER_WIDE_LEFT = 0x9, + NODE_CONCEALMENT_STAND = 0xA, + NODE_CONCEALMENT_CROUCH = 0xB, + NODE_CONCEALMENT_PRONE = 0xC, + NODE_REACQUIRE = 0xD, + NODE_BALCONY = 0xE, + NODE_SCRIPTED = 0xF, + NODE_NEGOTIATION_BEGIN = 0x10, + NODE_NEGOTIATION_END = 0x11, + NODE_TURRET = 0x12, + NODE_GUARD = 0x13, + NODE_NUMTYPES = 0x14, + NODE_DONTLINK = 0x14, +}; + +struct PathLink +{ + float fDist; + quint16 nodeNum; + quint8 disconnectCount; + quint8 negotiationLink; + quint8 ubBadPlaceCount[4]; +}; + +struct PathNodeConstant +{ + nodeType type; + quint16 spawnflags; + quint16 targetname; + quint16 script_linkName; + quint16 script_noteworthy; + quint16 target; + quint16 animscript; + int animscriptfunc; + float vOrigin[3]; + float fAngle; + float forward[2]; + float fRadius; + float minUseDistSq; + qint16 wOverlapNode[2]; + qint16 wChainId; + qint16 wChainDepth; + qint16 wChainParent; + quint16 totalLinkCount; + qint32 LinksPtr; + PathLink Links; +}; + +struct pathnode_dynamic_t +{ + void *pOwner; + int iFreeTime; + int iValidTime[3]; + int inPlayerLOSTime; + qint16 wLinkCount; + qint16 wOverlapCount; + qint16 turretEntNumber; + qint16 userCount; +}; + +struct pathnode_t; + +struct pathnode_transient_t +{ + int iSearchFrame; + pathnode_t *pNextOpen; + pathnode_t *pPrevOpen; + pathnode_t *pParent; + float fCost; + float fHeuristic; + float costFactor; +}; + +struct pathnode_t +{ + PathNodeConstant constant; + pathnode_dynamic_t dynamic; + pathnode_transient_t transient; +}; + +struct PathBaseNode +{ + float vOrigin[3]; + uint type; +}; + +struct PathNodeTree; + +struct PathNodeTreeNodes +{ + int nodeCount; + QVector nodes; +}; + +union PathNodeTreeInfo +{ + PathNodeTree *child[2]; + PathNodeTreeNodes s; +}; + +struct PathNodeTree +{ + int axis; + float dist; + qint32 infoPtr; + PathNodeTreeInfo info; +}; + +struct PathData +{ + uint nodeCount; + pathnode_t *nodes; + PathBaseNode *basenodes; + uint chainNodeCount; + quint16 *chainNodeForNode; + quint16 *nodeForChainNode; + int visBytes; + quint8 *pathVis; + int nodeTreeCount; + PathNodeTree *nodeTree; +}; + +struct GameWorldSp +{ + const char *name; + PathData path; +}; + +struct GameWorldMp +{ + qint32 namePtr; + QString name; +}; + +struct GfxStreamingAabbTree +{ + quint16 firstItem; + quint16 itemCount; + quint16 firstChild; + quint16 childCount; + float mins[3]; + float maxs[3]; +}; + +struct GfxWorldStreamInfo +{ + int aabbTreeCount; + qint32 aabbTreesPtr; + QVector aabbTrees; + + int leafRefCount; + qint32 leafRefsPtr; + QVector leafRefs; +}; + +struct GfxWorldVertex +{ + float xyz[3]; + float binormalSign; + GfxColor color; + float texCoord[2]; + float lmapCoord[2]; + PackedUnitVec normal; + PackedUnitVec tangent; +}; + +struct GfxWorldVertexData +{ + qint32 verticesPtr; + QVector vertices; + D3DVertexBuffer worldVb; +}; + +struct GfxWorldVertexLayerData +{ + qint32 dataPtr; + QVector data; + D3DVertexBuffer layerVb; +}; + +struct SunLightParseParams +{ + char name[64]; + float ambientScale; + float ambientColor[3]; + float diffuseFraction; + float sunLight; + float sunColor[3]; + float diffuseColor[3]; + bool diffuseColorHasBeenSet; + float angles[3]; +}; + +struct __declspec(align(4)) GfxLightImage +{ + GfxImage *image; + quint8 samplerState; +}; + +struct GfxLightDef +{ + const char *name; + GfxLightImage attenuation; + int lmapLookupStart; +}; + +struct GfxLight +{ + quint8 type; + quint8 canUseShadowMap; + quint8 unused[2]; + float color[3]; + float dir[3]; + float origin[3]; + float radius; + float cosHalfFovOuter; + float cosHalfFovInner; + int exponent; + uint spotShadowIndex; + GfxLightDef *def; +}; + +struct GfxReflectionProbe +{ + float origin[3]; + GfxImage *reflectionImage; +}; + +struct GfxWorldDpvsPlanes +{ + int cellCount; + qint32 planesPtr; + QVector planes; + qint32 nodesPtr; + QVector nodes; + qint32 sceneEntCellBitsPtr; + QVector sceneEntCellBits; +}; + +struct GfxAabbTree +{ + float mins[3]; + float maxs[3]; + quint16 childCount; + quint16 surfaceCount; + quint16 startSurfIndex; + + quint16 smodelIndexCount; + qint32 smodelIndexesPtr; + QVector smodelIndexes; + + int childrenOffset; +}; + +struct GfxPortal; + +struct GfxPortalWritable +{ + bool isQueued; + bool isAncestor; + quint8 recursionDepth; + quint8 hullPointCount; + quint32 hullPointPtrs[2]; + float hullPoints[2]; + qint32 queuedParentPtr; + GfxPortal *queuedParent; +}; + +struct DpvsPlane +{ + float coeffs[4]; + quint8 side[3]; + quint8 pad; +}; + +struct GfxCell; + +struct GfxPortal +{ + GfxPortalWritable writable; + DpvsPlane plane; + + qint32 cellPtr; + GfxCell *cell; + + qint32 verticesPtr; + float vertices[3]; + quint8 vertexCount; + + float hullAxis[2][3]; +}; + +struct GfxCell +{ + float mins[3]; + float maxs[3]; + + int aabbTreeCount; + qint32 aabbTreePtr; + QVector aabbTree; + + int portalCount; + qint32 portalsPtr; + QVector portals; + + int cullGroupCount; + qint32 cullGroupsPtr; + QVector cullGroups; + + quint8 reflectionProbeCount; + qint32 reflectionProbesPtr; + QVector reflectionProbes; +}; + +struct GfxLightmapArray +{ + GfxImage *primary; + GfxImage *secondary; +}; + +struct GfxLightGridEntry +{ + quint16 colorsIndex; + quint8 primaryLightIndex; + quint8 needsTrace; +}; + +struct GfxLightGridColors +{ + quint8 rgb[56][3]; +}; + +struct GfxLightGrid +{ + bool hasLightRegions; + uint sunPrimaryLightIndex; + quint16 mins[3]; + quint16 maxs[3]; + uint rowAxis; + uint colAxis; + qint32 rowDataStartPtr; + QVector rowDataStart; + uint rawRowDataSize; + qint32 rawRowDataPtr; + QVector rawRowData; + uint entryCount; + qint32 entriesPtr; + QVector entries; + uint colorCount; + qint32 colorsPtr; + QVector colors; +}; + +struct GfxBrushModelWritable +{ + float mins[3]; + float maxs[3]; +}; + +struct GfxBrushModel +{ + GfxBrushModelWritable writable; + float bounds[2][3]; + uint surfaceCount; + uint startSurfIndex; +}; + +struct MaterialMemory +{ + Material *material; + int memory; +}; + +struct sunflare_t +{ + bool hasValidData; + Material *spriteMaterial; + Material *flareMaterial; + float spriteSize; + float flareMinSize; + float flareMinDot; + float flareMaxSize; + float flareMaxDot; + float flareMaxAlpha; + int flareFadeInTime; + int flareFadeOutTime; + float blindMinDot; + float blindMaxDot; + float blindMaxDarken; + int blindFadeInTime; + int blindFadeOutTime; + float glareMinDot; + float glareMaxDot; + float glareMaxLighten; + int glareFadeInTime; + int glareFadeOutTime; + float sunFxPosition[3]; +}; + +struct XModelDrawInfo +{ + quint16 lod; + quint16 surfId; +}; + +struct GfxSceneDynModel +{ + XModelDrawInfo info; + quint16 dynEntId; +}; + +struct BModelDrawInfo +{ + quint16 surfId; +}; + +struct GfxSceneDynBrush +{ + BModelDrawInfo info; + quint16 dynEntId; +}; + +struct GfxShadowGeometry +{ + quint16 surfaceCount; + quint16 smodelCount; + qint32 sortedSurfIndexPtr; + QVector sortedSurfIndex; + qint32 smodelIndexPtr; + QVector smodelIndex; +}; + +struct GfxLightRegionAxis +{ + float dir[3]; + float midPoint; + float halfSize; +}; + +struct GfxLightRegionHull +{ + float kdopMidPoint[9]; + float kdopHalfSize[9]; + uint axisCount; + qint32 axisPtr; + QVector axis; +}; + +struct GfxLightRegion +{ + uint hullCount; + qint32 hullsPtr; + QVector hulls; +}; + +struct GfxStaticModelInst +{ + float mins[3]; + float maxs[3]; + GfxColor groundLighting; +}; + +struct srfTriangles_t +{ + int vertexLayerData; + int firstVertex; + quint16 vertexCount; + quint16 triCount; + int baseIndex; + float topMipMins[3]; + float topMipMaxs[3]; +}; + +struct GfxSurface +{ + srfTriangles_t tris; + Material *material; + quint8 lightmapIndex; + quint8 reflectionProbeIndex; + quint8 primaryLightIndex; + bool castsSunShadow; + float bounds[2][3]; +}; + +struct GfxCullGroup +{ + float mins[3]; + float maxs[3]; + int surfaceCount; + int startSurfIndex; +}; + +struct GfxPackedPlacement +{ + float origin[3]; + PackedUnitVec axis[3]; + float scale; +}; + +struct __declspec(align(4)) GfxStaticModelDrawInst +{ + float cullDist; + GfxPackedPlacement placement; + XModel *model; + quint8 reflectionProbeIndex; + quint8 primaryLightIndex; + quint16 lightingHandle; + quint8 flags; +}; + +struct GfxWorldDpvsStatic +{ + uint smodelCount; + uint staticSurfaceCount; + uint litSurfsBegin; + uint litSurfsEnd; + uint decalSurfsBegin; + uint decalSurfsEnd; + uint emissiveSurfsBegin; + uint emissiveSurfsEnd; + uint smodelVisDataCount; + uint surfaceVisDataCount; + quint8 *smodelVisData[3]; + quint8 *surfaceVisData[3]; + uint *lodData; + quint16 *sortedSurfIndex; + GfxStaticModelInst *smodelInsts; + GfxSurface *surfaces; + GfxCullGroup *cullGroups; + GfxStaticModelDrawInst *smodelDrawInsts; + GfxDrawSurfFields *surfaceMaterials; + uint *surfaceCastsSunShadow; + volatile int usageCount; +}; + +struct GfxWorldDpvsDynamic +{ + uint dynEntClientWordCount[2]; + uint dynEntClientCount[2]; + qint32 dynEntCellBitsPtrs[2]; + uint dynEntCellBits[2]; + qint32 dynEntVisDataPtrs[2][3]; + quint8 dynEntVisData[2][3]; +}; + +struct GfxWorld +{ + const char *name; + const char *baseName; + int planeCount; + int nodeCount; + int indexCount; + quint16 *indices; + D3DIndexBuffer indexBuffer; + int surfaceCount; + GfxWorldStreamInfo streamInfo; + int skySurfCount; + int *skyStartSurfs; + GfxImage *skyImage; + quint8 skySamplerState; + uint vertexCount; + GfxWorldVertexData vd; + uint vertexLayerDataSize; + GfxWorldVertexLayerData vld; + SunLightParseParams sunParse; + GfxLight *sunLight; + float sunColorFromBsp[3]; + uint sunPrimaryLightIndex; + uint primaryLightCount; + int cullGroupCount; + uint reflectionProbeCount; + GfxReflectionProbe *reflectionProbes; + GfxTexture *reflectionProbeTextures; + GfxWorldDpvsPlanes dpvsPlanes; + int cellBitsCount; + GfxCell *cells; + int lightmapCount; + GfxLightmapArray *lightmaps; + GfxLightGrid lightGrid; + GfxTexture *lightmapPrimaryTextures; + GfxTexture *lightmapSecondaryTextures; + int modelCount; + GfxBrushModel *models; + float mins[3]; + float maxs[3]; + uint checksum; + int materialMemoryCount; + MaterialMemory *materialMemory; + sunflare_t sun; + float outdoorLookupMatrix[4][4]; + GfxImage *outdoorImage; + uint *cellCasterBits; + GfxSceneDynModel *sceneDynModel; + GfxSceneDynBrush *sceneDynBrush; + uint *primaryLightEntityShadowVis; + uint *primaryLightDynEntShadowVis[2]; + quint8 *nonSunPrimaryLightForModelDynEnt; + GfxShadowGeometry *shadowGeom; + GfxLightRegion *lightRegion; + GfxWorldDpvsStatic dpvs; + GfxWorldDpvsDynamic dpvsDyn; +}; + +struct Glyph +{ + quint16 letter; + char x0; + char y0; + quint8 dx; + quint8 pixelWidth; + quint8 pixelHeight; + float s0; + float t0; + float s1; + float t1; +}; + +struct Font_s +{ + const char *fontName; + int pixelHeight; + int glyphCount; + Material *material; + Material *glowMaterial; + Glyph *glyphs; +}; + +struct rectDef_s +{ + float x; + float y; + float w; + float h; + int horzAlign; + int vertAlign; +}; + +struct windowDef_t +{ + const char *name; + rectDef_s rect; + rectDef_s rectClient; + const char *group; + int style; + int border; + int ownerDraw; + int ownerDrawFlags; + float borderSize; + int staticFlags; + int dynamicFlags[4]; + int nextTime; + float foreColor[4]; + float backColor[4]; + float borderColor[4]; + float outlineColor[4]; + Material *background; +}; + +struct ItemKeyHandler +{ + int key; + qint32 actionPtr; + QString action; + qint32 nextPtr; + ItemKeyHandler *next; +}; + +enum OperationEnum : qint32 +{ + OP_NOOP = 0x0, + OP_RIGHTPAREN = 0x1, + OP_MULTIPLY = 0x2, + OP_DIVIDE = 0x3, + OP_MODULUS = 0x4, + OP_ADD = 0x5, + OP_SUBTRACT = 0x6, + OP_NOT = 0x7, + OP_LESSTHAN = 0x8, + OP_LESSTHANEQUALTO = 0x9, + OP_GREATERTHAN = 0xA, + OP_GREATERTHANEQUALTO = 0xB, + OP_EQUALS = 0xC, + OP_NOTEQUAL = 0xD, + OP_AND = 0xE, + OP_OR = 0xF, + OP_LEFTPAREN = 0x10, + OP_COMMA = 0x11, + OP_BITWISEAND = 0x12, + OP_BITWISEOR = 0x13, + OP_BITWISENOT = 0x14, + OP_BITSHIFTLEFT = 0x15, + OP_BITSHIFTRIGHT = 0x16, + OP_SIN = 0x17, + OP_FIRSTFUNCTIONCALL = 0x17, + OP_COS = 0x18, + OP_MIN = 0x19, + OP_MAX = 0x1A, + OP_MILLISECONDS = 0x1B, + OP_DVARINT = 0x1C, + OP_DVARBOOL = 0x1D, + OP_DVARFLOAT = 0x1E, + OP_DVARSTRING = 0x1F, + OP_STAT = 0x20, + OP_UIACTIVE = 0x21, + OP_FLASHBANGED = 0x22, + OP_SCOPED = 0x23, + OP_SCOREBOARDVISIBLE = 0x24, + OP_INKILLCAM = 0x25, + OP_PLAYERFIELD = 0x26, + OP_SELECTINGLOCATION = 0x27, + OP_TEAMFIELD = 0x28, + OP_OTHERTEAMFIELD = 0x29, + OP_MARINESFIELD = 0x2A, + OP_OPFORFIELD = 0x2B, + OP_MENUISOPEN = 0x2C, + OP_WRITINGDATA = 0x2D, + OP_INLOBBY = 0x2E, + OP_INPRIVATEPARTY = 0x2F, + OP_PRIVATEPARTYHOST = 0x30, + OP_PRIVATEPARTYHOSTINLOBBY = 0x31, + OP_ALONEINPARTY = 0x32, + OP_ADSJAVELIN = 0x33, + OP_WEAPLOCKBLINK = 0x34, + OP_WEAPATTACKTOP = 0x35, + OP_WEAPATTACKDIRECT = 0x36, + OP_SECONDSASTIME = 0x37, + OP_TABLELOOKUP = 0x38, + OP_LOCALIZESTRING = 0x39, + OP_LOCALVARINT = 0x3A, + OP_LOCALVARBOOL = 0x3B, + OP_LOCALVARFLOAT = 0x3C, + OP_LOCALVARSTRING = 0x3D, + OP_TIMELEFT = 0x3E, + OP_SECONDSASCOUNTDOWN = 0x3F, + OP_GAMEMSGWNDACTIVE = 0x40, + OP_TOINT = 0x41, + OP_TOSTRING = 0x42, + OP_TOFLOAT = 0x43, + OP_GAMETYPENAME = 0x44, + OP_GAMETYPE = 0x45, + OP_GAMETYPEDESCRIPTION = 0x46, + OP_SCORE = 0x47, + OP_FRIENDSONLINE = 0x48, + OP_FOLLOWING = 0x49, + OP_STATRANGEBITSSET = 0x4A, + OP_KEYBINDING = 0x4B, + OP_ACTIONSLOTUSABLE = 0x4C, + OP_HUDFADE = 0x4D, + OP_MAXPLAYERS = 0x4E, + OP_ACCEPTINGINVITE = 0x4F, + NUM_OPERATORS = 0x50, +}; + +enum expDataType : __int32 +{ + VAL_INT = 0x0, + VAL_FLOAT = 0x1, + VAL_STRING = 0x2, +}; + +struct Operand +{ + expDataType dataType; + int intVal; + float floatVal; + QString stringVal; +}; + +union entryInternalData +{ + OperationEnum op; + Operand operand; +}; + +struct expressionEntry +{ + int type; + entryInternalData data; +}; + +struct statement_s +{ + int numEntries; + expressionEntry **entries; +}; + +struct ItemDef; + +struct menuDef_t +{ + windowDef_t window; + const char *font; + int fullScreen; + int itemCount; + int fontIndex; + int cursorItem[4]; + int fadeCycle; + float fadeClamp; + float fadeAmount; + float fadeInAmount; + float blurRadius; + const char *onOpen; + const char *onClose; + const char *onESC; + ItemKeyHandler *onKey; + statement_s visibleExp; + const char *allowedBinding; + const char *soundName; + int imageTrack; + float focusColor[4]; + float disableColor[4]; + statement_s rectXExp; + statement_s rectYExp; + ItemDef **items; +}; + +struct columnInfo_s +{ + int pos; + int width; + int maxChars; + int alignment; +}; + +struct listBoxDef_s +{ + int startPos[4]; + int endPos[4]; + int drawPadding; + float elementWidth; + float elementHeight; + int elementStyle; + int numColumns; + columnInfo_s columnInfo[16]; + const char *doubleClick; + int notselectable; + int noScrollBars; + int usePaging; + float selectBorder[4]; + float disableColor[4]; + Material *selectIcon; +}; + +struct EditFieldDef +{ + float minVal; + float maxVal; + float defVal; + float range; + int maxChars; + int maxCharsGotoNext; + int maxPaintChars; + int paintOffset; +}; + +struct MultiDef +{ + QVector dvarListPtrs; + QStringList dvarList; + QVector dvarStrPtrs; + QStringList dvarStr; + QVector dvarValue[32]; + int count; + int strDef; +}; + +union ItemDefData +{ + listBoxDef_s *listBox; + EditFieldDef *editField; + MultiDef *multi; + const char *enumDvarName; + void *data; +}; + +struct ItemDef +{ + windowDef_t window; + rectDef_s textRect[4]; + int type; + int dataType; + int alignment; + int fontEnum; + int textAlignMode; + float textalignx; + float textaligny; + float textscale; + int textStyle; + int gameMsgWindowIndex; + int gameMsgWindowMode; + const char *text; + int itemFlags; + menuDef_t *parent; + const char *mouseEnterText; + const char *mouseExitText; + const char *mouseEnter; + const char *mouseExit; + const char *action; + const char *onAccept; + const char *onFocus; + const char *leaveFocus; + const char *dvar; + const char *dvarTest; + ItemKeyHandler *onKey; + const char *enableDvar; + int dvarFlags; + SoundAliasList *focusSound; + float special; + int cursorPos[4]; + ItemDefData typeData; + int imageTrack; + statement_s visibleExp; + statement_s textExp; + statement_s materialExp; + statement_s rectXExp; + statement_s rectYExp; + statement_s rectWExp; + statement_s rectHExp; + statement_s forecolorAExp; +}; + +struct MenuList +{ + qint32 namePtr; + QString name; + int menuCount; + qint32 menusPtr; + QVector menus; +}; + +struct LocalizeEntry +{ + qint32 valuePtr; + QString value; + + qint32 namePtr; + QString name; +}; + +enum WeaponType : __int32 +{ + WEAPTYPE_BULLET = 0x0, + WEAPTYPE_GRENADE = 0x1, + WEAPTYPE_PROJECTILE = 0x2, + WEAPTYPE_BINOCULARS = 0x3, + WEAPTYPE_NUM = 0x4, +}; + +enum WeaponClass : __int32 +{ + WEAPCLASS_RIFLE = 0x0, + WEAPCLASS_MG = 0x1, + WEAPCLASS_SMG = 0x2, + WEAPCLASS_SPREAD = 0x3, + WEAPCLASS_PISTOL = 0x4, + WEAPCLASS_GRENADE = 0x5, + WEAPCLASS_ROCKETLAUNCHER = 0x6, + WEAPCLASS_TURRET = 0x7, + WEAPCLASS_NON_PLAYER = 0x8, + WEAPCLASS_ITEM = 0x9, + WEAPCLASS_NUM = 0xA, +}; + +enum PenetrateType : __int32 +{ + PENETRATE_TYPE_NONE = 0x0, + PENETRATE_TYPE_SMALL = 0x1, + PENETRATE_TYPE_MEDIUM = 0x2, + PENETRATE_TYPE_LARGE = 0x3, + PENETRATE_TYPE_COUNT = 0x4, +}; + +enum ImpactType : __int32 +{ + IMPACT_TYPE_NONE = 0x0, + IMPACT_TYPE_BULLET_SMALL = 0x1, + IMPACT_TYPE_BULLET_LARGE = 0x2, + IMPACT_TYPE_BULLET_AP = 0x3, + IMPACT_TYPE_SHOTGUN = 0x4, + IMPACT_TYPE_GRENADE_BOUNCE = 0x5, + IMPACT_TYPE_GRENADE_EXPLODE = 0x6, + IMPACT_TYPE_ROCKET_EXPLODE = 0x7, + IMPACT_TYPE_PROJECTILE_DUD = 0x8, + IMPACT_TYPE_COUNT = 0x9, +}; + +enum WeaponInventoryType : __int32 +{ + WEAPINVENTORY_PRIMARY = 0x0, + WEAPINVENTORY_OFFHAND = 0x1, + WEAPINVENTORY_ITEM = 0x2, + WEAPINVENTORY_ALTMODE = 0x3, + WEAPINVENTORYCOUNT = 0x4, +}; + +enum WeaponFireType : __int32 +{ + WEAPON_FIRETYPE_FULLAUTO = 0x0, + WEAPON_FIRETYPE_SINGLESHOT = 0x1, + WEAPON_FIRETYPE_BURSTFIRE2 = 0x2, + WEAPON_FIRETYPE_BURSTFIRE3 = 0x3, + WEAPON_FIRETYPE_BURSTFIRE4 = 0x4, + WEAPON_FIRETYPECOUNT = 0x5, +}; + +enum OffhandClass : __int32 +{ + OFFHAND_CLASS_NONE = 0x0, + OFFHAND_CLASS_FRAG_GRENADE = 0x1, + OFFHAND_CLASS_SMOKE_GRENADE = 0x2, + OFFHAND_CLASS_FLASH_GRENADE = 0x3, + OFFHAND_CLASS_COUNT = 0x4, +}; + +enum WeaponStance : __int32 +{ + WEAPSTANCE_STAND = 0x0, + WEAPSTANCE_DUCK = 0x1, + WEAPSTANCE_PRONE = 0x2, + WEAPSTANCE_NUM = 0x3, +}; + +enum ActiveReticleType : __int32 +{ + VEH_ACTIVE_RETICLE_NONE = 0x0, + VEH_ACTIVE_RETICLE_PIP_ON_A_STICK = 0x1, + VEH_ACTIVE_RETICLE_BOUNCING_DIAMOND = 0x2, + VEH_ACTIVE_RETICLE_COUNT = 0x3, +}; + +enum WeaponIconRatioType : __int32 +{ + WEAPON_ICON_RATIO_1TO1 = 0x0, + WEAPON_ICON_RATIO_2TO1 = 0x1, + WEAPON_ICON_RATIO_4TO1 = 0x2, + WEAPON_ICON_RATIO_COUNT = 0x3, +}; + +enum AmmoCounterClipType : __int32 +{ + AMMO_COUNTER_CLIP_NONE = 0x0, + AMMO_COUNTER_CLIP_MAGAZINE = 0x1, + AMMO_COUNTER_CLIP_SHORTMAGAZINE = 0x2, + AMMO_COUNTER_CLIP_SHOTGUN = 0x3, + AMMO_COUNTER_CLIP_ROCKET = 0x4, + AMMO_COUNTER_CLIP_BELTFED = 0x5, + AMMO_COUNTER_CLIP_ALTWEAPON = 0x6, + AMMO_COUNTER_CLIP_COUNT = 0x7, +}; + +enum WeaponOverlayReticle : __int32 +{ + WEAPOVERLAYRETICLE_NONE = 0x0, + WEAPOVERLAYRETICLE_CROSSHAIR = 0x1, + WEAPOVERLAYRETICLE_NUM = 0x2, +}; + +enum WeapOverlayInteface_t : __int32 +{ + WEAPOVERLAYINTERFACE_NONE = 0x0, + WEAPOVERLAYINTERFACE_JAVELIN = 0x1, + WEAPOVERLAYINTERFACE_TURRETSCOPE = 0x2, + WEAPOVERLAYINTERFACECOUNT = 0x3, +}; + +enum WeaponProjExposion : __int32 +{ + WEAPPROJEXP_GRENADE = 0x0, + WEAPPROJEXP_ROCKET = 0x1, + WEAPPROJEXP_FLASHBANG = 0x2, + WEAPPROJEXP_NONE = 0x3, + WEAPPROJEXP_DUD = 0x4, + WEAPPROJEXP_SMOKE = 0x5, + WEAPPROJEXP_HEAVY = 0x6, + WEAPPROJEXP_NUM = 0x7, +}; + +enum WeapStickinessType : __int32 +{ + WEAPSTICKINESS_NONE = 0x0, + WEAPSTICKINESS_ALL = 0x1, + WEAPSTICKINESS_GROUND = 0x2, + WEAPSTICKINESS_GROUND_WITH_YAW = 0x3, + WEAPSTICKINESS_COUNT = 0x4, +}; + +enum GuidedMissileType : __int32 +{ + MISSILE_GUIDANCE_NONE = 0x0, + MISSILE_GUIDANCE_SIDEWINDER = 0x1, + MISSILE_GUIDANCE_HELLFIRE = 0x2, + MISSILE_GUIDANCE_JAVELIN = 0x3, + MISSILE_GUIDANCE_COUNT = 0x4, +}; + +struct WeaponDef +{ + qint32 szInternalNamePtr; + QString szInternalName; + + qint32 szDisplayNamePtr; + QString szDisplayName; + + qint32 szOverlayNamePtr; + QString szOverlayName; + + qint32 gunXModelPtr; + QVector gunXModel; + + qint32 handXModelPtr; + XModel handXModel; + + qint32 szXAnimsPtr[33]; + QStringList szXAnims; + + qint32 szModeNamePtr; + QString szModeName; + + quint16 hideTags[8]; + quint16 notetrackSoundMapKeys[16]; + quint16 notetrackSoundMapValues[16]; + int playerAnimType; + WeaponType weapType; + WeaponClass weapClass; + PenetrateType penetrateType; + ImpactType impactType; + WeaponInventoryType inventoryType; + WeaponFireType fireType; + OffhandClass offhandClass; + WeaponStance stance; + + qint32 viewFlashEffectPtr; + FxEffectDef viewFlashEffect; + + qint32 worldFlashEffectPtr; + FxEffectDef worldFlashEffect; + + qint32 pickupSoundPtr; + SoundAliasList pickupSound; + + qint32 pickupSoundPlayerPtr; + SoundAliasList pickupSoundPlayer; + + qint32 ammoPickupSoundPtr; + SoundAliasList ammoPickupSound; + + qint32 ammoPickupSoundPlayerPtr; + SoundAliasList ammoPickupSoundPlayer; + + qint32 projectileSoundPtr; + SoundAliasList projectileSound; + + qint32 pullbackSoundPtr; + SoundAliasList pullbackSound; + + qint32 pullbackSoundPlayerPtr; + SoundAliasList pullbackSoundPlayer; + + qint32 fireSoundPtr; + SoundAliasList fireSound; + + qint32 fireSoundPlayerPtr; + SoundAliasList fireSoundPlayer; + + qint32 fireLoopSoundPtr; + SoundAliasList fireLoopSound; + + qint32 fireLoopSoundPlayerPtr; + SoundAliasList fireLoopSoundPlayer; + + qint32 fireStopSoundPtr; + SoundAliasList fireStopSound; + + qint32 fireStopSoundPlayerPtr; + SoundAliasList fireStopSoundPlayer; + + qint32 fireLastSoundPtr; + SoundAliasList fireLastSound; + + qint32 fireLastSoundPlayerPtr; + SoundAliasList fireLastSoundPlayer; + + qint32 emptyFireSoundPtr; + SoundAliasList emptyFireSound; + + qint32 emptyFireSoundPlayerPtr; + SoundAliasList emptyFireSoundPlayer; + + qint32 meleeSwipeSoundPtr; + SoundAliasList meleeSwipeSound; + + qint32 meleeSwipeSoundPlayerPtr; + SoundAliasList meleeSwipeSoundPlayer; + + qint32 meleeHitSoundPtr; + SoundAliasList meleeHitSound; + + qint32 meleeMissSoundPtr; + SoundAliasList meleeMissSound; + + qint32 rechamberSoundPtr; + SoundAliasList rechamberSound; + + qint32 rechamberSoundPlayerPtr; + SoundAliasList rechamberSoundPlayer; + + qint32 reloadSoundPtr; + SoundAliasList reloadSound; + + qint32 reloadSoundPlayerPtr; + SoundAliasList reloadSoundPlayer; + + qint32 reloadEmptySoundPtr; + SoundAliasList reloadEmptySound; + + qint32 reloadEmptySoundPlayerPtr; + SoundAliasList reloadEmptySoundPlayer; + + qint32 reloadStartSoundPtr; + SoundAliasList reloadStartSound; + + qint32 reloadStartSoundPlayerPtr; + SoundAliasList reloadStartSoundPlayer; + + qint32 reloadEndSoundPtr; + SoundAliasList reloadEndSound; + + qint32 reloadEndSoundPlayerPtr; + SoundAliasList reloadEndSoundPlayer; + + qint32 detonateSoundPtr; + SoundAliasList detonateSound; + + qint32 detonateSoundPlayerPtr; + SoundAliasList detonateSoundPlayer; + + qint32 nightVisionWearSoundPtr; + SoundAliasList nightVisionWearSound; + + qint32 nightVisionWearSoundPlayerPtr; + SoundAliasList nightVisionWearSoundPlayer; + + qint32 nightVisionRemoveSoundPtr; + SoundAliasList nightVisionRemoveSound; + + qint32 nightVisionRemoveSoundPlayerPtr; + SoundAliasList nightVisionRemoveSoundPlayer; + + qint32 altSwitchSoundPtr; + SoundAliasList altSwitchSound; + + qint32 altSwitchSoundPlayerPtr; + SoundAliasList altSwitchSoundPlayer; + + qint32 raiseSoundPtr; + SoundAliasList raiseSound; + + qint32 raiseSoundPlayerPtr; + SoundAliasList raiseSoundPlayer; + + qint32 firstRaiseSoundPtr; + SoundAliasList firstRaiseSound; + + qint32 firstRaiseSoundPlayerPtr; + SoundAliasList firstRaiseSoundPlayer; + + qint32 putawaySoundPtr; + SoundAliasList putawaySound; + + qint32 putawaySoundPlayerPtr; + SoundAliasList putawaySoundPlayer; + + qint32 bounceSoundPtr; + SoundAliasList *bounceSound; + + qint32 viewShellEjectEffectPtr; + FxEffectDef viewShellEjectEffect; + + qint32 worldShellEjectEffectPtr; + FxEffectDef worldShellEjectEffect; + + qint32 viewLastShotEjectEffectPtr; + FxEffectDef viewLastShotEjectEffect; + + qint32 worldLastShotEjectEffectPtr; + FxEffectDef worldLastShotEjectEffect; + + qint32 reticleCenterPtr; + Material reticleCenter; + + qint32 reticleSidePtr; + Material reticleSide; + + int iReticleCenterSize; + int iReticleSideSize; + int iReticleMinOfs; + ActiveReticleType activeReticleType; + float vStandMove[3]; + float vStandRot[3]; + float vDuckedOfs[3]; + float vDuckedMove[3]; + float vDuckedRot[3]; + float vProneOfs[3]; + float vProneMove[3]; + float vProneRot[3]; + float fPosMoveRate; + float fPosProneMoveRate; + float fStandMoveMinSpeed; + float fDuckedMoveMinSpeed; + float fProneMoveMinSpeed; + float fPosRotRate; + float fPosProneRotRate; + float fStandRotMinSpeed; + float fDuckedRotMinSpeed; + float fProneRotMinSpeed; + + qint32 worldModelPtr; + QVector worldModel; + + qint32 worldClipModelPtr; + XModel worldClipModel; + + qint32 rocketModelPtr; + XModel rocketModel; + + qint32 knifeModelPtr; + XModel knifeModel; + + qint32 worldKnifeModelPtr; + XModel worldKnifeModel; + + qint32 hudIconPtr; + Material hudIcon; + WeaponIconRatioType hudIconRatio; + + qint32 ammoCounterIconPtr; + Material ammoCounterIcon; + + WeaponIconRatioType ammoCounterIconRatio; + AmmoCounterClipType ammoCounterClip; + int iStartAmmo; + + qint32 szAmmoNamePtr; + QString szAmmoName; + int iAmmoIndex; + + qint32 szClipNamePtr; + QString szClipName; + + int iClipIndex; + int iMaxAmmo; + int iClipSize; + int shotCount; + + qint32 szSharedAmmoCapNamePtr; + QString szSharedAmmoCapName; + + int iSharedAmmoCapIndex; + int iSharedAmmoCap; + int damage; + int playerDamage; + int iMeleeDamage; + int iDamageType; + int iFireDelay; + int iMeleeDelay; + int meleeChargeDelay; + int iDetonateDelay; + int iFireTime; + int iRechamberTime; + int iRechamberBoltTime; + int iHoldFireTime; + int iDetonateTime; + int iMeleeTime; + int meleeChargeTime; + int iReloadTime; + int reloadShowRocketTime; + int iReloadEmptyTime; + int iReloadAddTime; + int iReloadStartTime; + int iReloadStartAddTime; + int iReloadEndTime; + int iDropTime; + int iRaiseTime; + int iAltDropTime; + int iAltRaiseTime; + int quickDropTime; + int quickRaiseTime; + int iFirstRaiseTime; + int iEmptyRaiseTime; + int iEmptyDropTime; + int sprintInTime; + int sprintLoopTime; + int sprintOutTime; + int nightVisionWearTime; + int nightVisionWearTimeFadeOutEnd; + int nightVisionWearTimePowerUp; + int nightVisionRemoveTime; + int nightVisionRemoveTimePowerDown; + int nightVisionRemoveTimeFadeInStart; + int fuseTime; + int aiFuseTime; + int requireLockonToFire; + int noAdsWhenMagEmpty; + int avoidDropCleanup; + float autoAimRange; + float aimAssistRange; + float aimAssistRangeAds; + float aimPadding; + float enemyCrosshairRange; + int crosshairColorChange; + float moveSpeedScale; + float adsMoveSpeedScale; + float sprintDurationScale; + float fAdsZoomFov; + float fAdsZoomInFrac; + float fAdsZoomOutFrac; + + qint32 overlayMaterialPtr; + Material overlayMaterial; + + qint32 overlayMaterialLowResPtr; + Material overlayMaterialLowRes; + + WeaponOverlayReticle overlayReticle; + WeapOverlayInteface_t overlayInterface; + float overlayWidth; + float overlayHeight; + float fAdsBobFactor; + float fAdsViewBobMult; + float fHipSpreadStandMin; + float fHipSpreadDuckedMin; + float fHipSpreadProneMin; + float hipSpreadStandMax; + float hipSpreadDuckedMax; + float hipSpreadProneMax; + float fHipSpreadDecayRate; + float fHipSpreadFireAdd; + float fHipSpreadTurnAdd; + float fHipSpreadMoveAdd; + float fHipSpreadDuckedDecay; + float fHipSpreadProneDecay; + float fHipReticleSidePos; + int iAdsTransInTime; + int iAdsTransOutTime; + float fAdsIdleAmount; + float fHipIdleAmount; + float adsIdleSpeed; + float hipIdleSpeed; + float fIdleCrouchFactor; + float fIdleProneFactor; + float fGunMaxPitch; + float fGunMaxYaw; + float swayMaxAngle; + float swayLerpSpeed; + float swayPitchScale; + float swayYawScale; + float swayHorizScale; + float swayVertScale; + float swayShellShockScale; + float adsSwayMaxAngle; + float adsSwayLerpSpeed; + float adsSwayPitchScale; + float adsSwayYawScale; + float adsSwayHorizScale; + float adsSwayVertScale; + int bRifleBullet; + int armorPiercing; + int bBoltAction; + int aimDownSight; + int bRechamberWhileAds; + float adsViewErrorMin; + float adsViewErrorMax; + int bCookOffHold; + int bClipOnly; + int adsFireOnly; + int cancelAutoHolsterWhenEmpty; + int suppressAmmoReserveDisplay; + int enhanced; + int laserSightDuringNightvision; + + qint32 killIconPtr; + Material killIcon; + WeaponIconRatioType killIconRatio; + int flipKillIcon; + + qint32 dpadIconPtr; + Material dpadIcon; + + WeaponIconRatioType dpadIconRatio; + int bNoPartialReload; + int bSegmentedReload; + int iReloadAmmoAdd; + int iReloadStartAdd; + + qint32 szAltWeaponNamePtr; + QString szAltWeaponName; + + uint altWeaponIndex; + int iDropAmmoMin; + int iDropAmmoMax; + int blocksProne; + int silenced; + int iExplosionRadius; + int iExplosionRadiusMin; + int iExplosionInnerDamage; + int iExplosionOuterDamage; + float damageConeAngle; + int iProjectileSpeed; + int iProjectileSpeedUp; + int iProjectileSpeedForward; + int iProjectileActivateDist; + float projLifetime; + float timeToAccelerate; + float projectileCurvature; + + qint32 projectileModelPtr; + XModel projectileModel; + WeaponProjExposion projExplosion; + + qint32 projExplosionEffectPtr; + FxEffectDef projExplosionEffect; + int projExplosionEffectForceNormalUp; + + qint32 projDudEffectPtr; + FxEffectDef projDudEffect; + + qint32 projExplosionSoundPtr; + SoundAliasList projExplosionSound; + + qint32 projDudSoundPtr; + SoundAliasList projDudSound; + + int bProjImpactExplode; + WeapStickinessType stickiness; + int hasDetonator; + int timedDetonation; + int rotate; + int holdButtonToThrow; + int freezeMovementWhenFiring; + float lowAmmoWarningThreshold; + float parallelBounce[29]; + float perpendicularBounce[29]; + + qint32 projTrailEffectPtr; + FxEffectDef projTrailEffect; + + float vProjectileColor[3]; + GuidedMissileType guidedMissileType; + float maxSteeringAccel; + int projIgnitionDelay; + FxEffectDef projIgnitionEffect; + + qint32 projIgnitionSoundPtr; + SoundAliasList projIgnitionSound; + + float fAdsAimPitch; + float fAdsCrosshairInFrac; + float fAdsCrosshairOutFrac; + int adsGunKickReducedKickBullets; + float adsGunKickReducedKickPercent; + float fAdsGunKickPitchMin; + float fAdsGunKickPitchMax; + float fAdsGunKickYawMin; + float fAdsGunKickYawMax; + float fAdsGunKickAccel; + float fAdsGunKickSpeedMax; + float fAdsGunKickSpeedDecay; + float fAdsGunKickStaticDecay; + float fAdsViewKickPitchMin; + float fAdsViewKickPitchMax; + float fAdsViewKickYawMin; + float fAdsViewKickYawMax; + float fAdsViewKickCenterSpeed; + float fAdsViewScatterMin; + float fAdsViewScatterMax; + float fAdsSpread; + int hipGunKickReducedKickBullets; + float hipGunKickReducedKickPercent; + float fHipGunKickPitchMin; + float fHipGunKickPitchMax; + float fHipGunKickYawMin; + float fHipGunKickYawMax; + float fHipGunKickAccel; + float fHipGunKickSpeedMax; + float fHipGunKickSpeedDecay; + float fHipGunKickStaticDecay; + float fHipViewKickPitchMin; + float fHipViewKickPitchMax; + float fHipViewKickYawMin; + float fHipViewKickYawMax; + float fHipViewKickCenterSpeed; + float fHipViewScatterMin; + float fHipViewScatterMax; + float fightDist; + float maxDist; + + qint32 accuracyGraphNamePtr[2]; + QString accuracyGraphName[2]; + + qint32 accuracyGraphKnotsPtr[2]; + float accuracyGraphKnots[2]; + + qint32 originalAccuracyGraphKnotsPtr[2]; + float originalAccuracyGraphKnots[2]; + + int accuracyGraphKnotCount[2]; + int originalAccuracyGraphKnotCount[2]; + int iPositionReloadTransTime; + float leftArc; + float rightArc; + float topArc; + float bottomArc; + float accuracy; + float aiSpread; + float playerSpread; + float minTurnSpeed[2]; + float maxTurnSpeed[2]; + float pitchConvergenceTime; + float yawConvergenceTime; + float suppressTime; + float maxRange; + float fAnimHorRotateInc; + float fPlayerPositionDist; + + qint32 szUseHintStringPtr; + QString szUseHintString; + + qint32 dropHintStringPtr; + QString dropHintString; + + int iUseHintStringIndex; + int dropHintStringIndex; + float horizViewJitter; + float vertViewJitter; + + qint32 szScriptPtr; + const char *szScript; + + float fOOPosAnimLength[2]; + int minDamage; + int minPlayerDamage; + float fMaxDamageRange; + float fMinDamageRange; + float destabilizationRateTime; + float destabilizationCurvatureMax; + int destabilizeDistance; + float locationDamageMultipliers[19]; + + qint32 fireRumblePtr; + QString fireRumble; + + qint32 meleeImpactRumblePtr; + QString meleeImpactRumble; + + float adsDofStart; + float adsDofEnd; +}; + +struct XAUDIOREVERBSETTINGS +{ + uint ReflectionsDelay; + quint8 ReverbDelay; + quint8 RearDelay; + quint8 PositionLeft; + quint8 PositionRight; + quint8 PositionMatrixLeft; + quint8 PositionMatrixRight; + quint8 EarlyDiffusion; + quint8 LateDiffusion; + quint8 LowEQGain; + quint8 LowEQCutoff; + quint8 HighEQGain; + quint8 HighEQCutoff; + float RoomFilterFreq; + float RoomFilterMain; + float RoomFilterHF; + float ReflectionsGain; + float ReverbGain; + float DecayTime; + float Density; + float RoomSize; +}; + +struct XaReverbSettings +{ + int presetOverridden; + XAUDIOREVERBSETTINGS reverbSettings; +}; + +struct SndDriverGlobals +{ + qint32 reverbSettingsPtr; + XaReverbSettings reverbSettings; + qint32 namePtr; + QString name; +}; + +struct FxImpactEntry +{ + qint32 nonFleshPtrs[29]; + QVector nonflesh; + qint32 fleshPtrs[4]; + QVector flesh; +}; + +struct FxImpactTable +{ + qint32 namePtr; + QString name; + qint32 tablePtr; + QVector table; +}; + +struct RawFile +{ + qint32 namePtr; + QString name; + int len; + qint32 bufferPtr; + QString buffer; +}; + +struct StringTable +{ + qint32 namePtr; + QString name; + int columnCount; + int rowCount; + qint32 valuesPtr; + QStringList values; +}; + +union XAssetHeader +{ + XModelPieces *xmodelPieces; + PhysPreset *physPreset; + XAnimParts *parts; + XModel *model; + Material *material; + MaterialPixelShader *pixelShader; + MaterialVertexShader *vertexShader; + MaterialTechniqueSet *techniqueSet; + GfxImage *image; + SoundAliasList *sound; + SndCurve *sndCurve; + LoadedSound *loadSnd; + clipMap_t *clipMap; + ComWorld *comWorld; + GameWorldSp *gameWorldSp; + GameWorldMp *gameWorldMp; + MapEnts *mapEnts; + GfxWorld *gfxWorld; + GfxLightDef *lightDef; + Font_s *font; + MenuList *menuList; + menuDef_t *menu; + LocalizeEntry *localize; + WeaponDef *weapon; + SndDriverGlobals *sndDriverGlobals; + const FxEffectDef *fx; + FxImpactTable *impactFx; + RawFile *rawfile; + StringTable *stringTable; + void *data; +}; + +struct StreamDelayInfo +{ + const void *ptr; + int size; }; class Assets : public QObject { Q_OBJECT public: - AssetMap assetMap; - - Assets(); + explicit Assets(QObject *parent = nullptr); ~Assets(); - Assets(const Assets &Assets); - Assets &operator=(const Assets &other); - - virtual std::shared_ptr Load_Animation(QDataStream *aZoneFileStream) { - Animation result = {}; - - // Load_XAnimPartsPtr() - qint32 animationptr; - *aZoneFileStream >> animationptr; - - if (animationptr) { - if (animationptr != -1 && animationptr != -2) { - return nullptr; - } - - // Load_XAnimParts() - XAnimParts animParts; - *aZoneFileStream >> animParts; - } - - return std::make_shared(result); - } - virtual QString Load_XString(QDataStream *aZoneFileStream) { - QString currentStr; - - qint32 stringPtr; - *aZoneFileStream >> stringPtr; - - if (stringPtr) { - if (stringPtr == -1) { - currentStr = Load_XStringCustom(aZoneFileStream); - } - else { - // Resolve from g_streamBlocks - } - } - return currentStr; - } - virtual QString Load_XStringCustom(QDataStream *aZoneFileStream) { - QString currentStr; - char currentChar; - *aZoneFileStream >> currentChar; - while (currentChar != 0) { - currentStr += currentChar; - *aZoneFileStream >> currentChar; - } - return currentStr; - } - virtual std::shared_ptr Load_Model(QDataStream *aZoneFileStream) = 0; - virtual std::shared_ptr Load_Material(QDataStream *aZoneFileStream) = 0; - virtual std::shared_ptr Load_MaterialPixelShader(QDataStream *aZoneFileStream) = 0; - virtual std::shared_ptr Load_MaterialTechSet(QDataStream *aZoneFileStream) { - MaterialTechSet result = {}; - - // Load_MaterialTechSetPtr() - qint32 techSetPtr; - *aZoneFileStream >> techSetPtr; - - if (techSetPtr) { - if (techSetPtr != -1 && techSetPtr != -2) { - return nullptr; - } - - // Load_MaterialTechSet() - QByteArray varMaterialTechniqueSet(116, Qt::Uninitialized); - aZoneFileStream->readRawData(varMaterialTechniqueSet.data(), 116); - - aZoneFileStream->skipRawData(4); - - result.name = Load_XString(aZoneFileStream); - - result.techniques = Load_MaterialTechniquePtrArray(aZoneFileStream, 26); - } - - return std::make_shared(result); - } - virtual std::shared_ptr Load_GfxImage(QDataStream *aZoneFileStream) = 0; - virtual std::shared_ptr Load_SoundAliasList(QDataStream *aZoneFileStream) = 0; - virtual std::shared_ptr Load_SoundCurve(QDataStream *aZoneFileStream) = 0; - virtual std::shared_ptr Load_LoadedSound(QDataStream *aZoneFileStream) = 0; - virtual std::shared_ptr Load_ClipMap(QDataStream *aZoneFileStream) = 0; - virtual std::shared_ptr Load_ComWorld(QDataStream *aZoneFileStream) = 0; - virtual std::shared_ptr Load_GameWorldSp(QDataStream *aZoneFileStream) = 0; - virtual std::shared_ptr Load_GameWorldMp(QDataStream *aZoneFileStream) = 0; - virtual std::shared_ptr Load_MapEnts(QDataStream *aZoneFileStream) = 0; - virtual std::shared_ptr Load_GfxWorld(QDataStream *aZoneFileStream) = 0; - virtual std::shared_ptr Load_GfxLightPtr(QDataStream *aZoneFileStream) = 0; - virtual std::shared_ptr Load_GameFont(QDataStream *aZoneFileStream) = 0; - virtual std::shared_ptr Load_MenuList(QDataStream *aZoneFileStream) = 0; - virtual std::shared_ptr Load_MenuDef(QDataStream *aZoneFileStream) = 0; - virtual std::shared_ptr Load_LocalizeEntry(QDataStream *aZoneFileStream) = 0; - virtual std::shared_ptr Load_WeaponDef(QDataStream *aZoneFileStream) = 0; - virtual std::shared_ptr Load_SoundDriver(QDataStream *aZoneFileStream) = 0; - virtual std::shared_ptr Load_EffectDef(QDataStream *aZoneFileStream) = 0; - virtual std::shared_ptr Load_ImpactTable(QDataStream *aZoneFileStream) = 0; - virtual std::shared_ptr Load_RawFile(QDataStream *aZoneFileStream) = 0; - virtual std::shared_ptr Load_StringTable(QDataStream *aZoneFileStream) = 0; - - virtual QVector> Load_MaterialTechniquePtrArray(QDataStream *aZoneFileStream, int count) { - QVector> result; - - for (int i = 0; i < count; i++) { - qint32 materialTechniquePtr; - *aZoneFileStream >> materialTechniquePtr; - if (materialTechniquePtr) { - if (materialTechniquePtr == -1) { - result << Load_MaterialTechnique(aZoneFileStream); - } - } - } - return result; - } - -virtual std::shared_ptr Load_MaterialTechnique(QDataStream *aZoneFileStream) { - int passCount; - qDebug() << "D3DResource size: " << sizeof(D3DResource); - return nullptr; - -} - -virtual std::shared_ptr Load_MaterialPassArray(QDataStream *aZoneFileStream) { - return nullptr; -} - -private slots: private: + QVector Load_GlyphArray(QDataStream *aStream, int count); + QVector Load_GfxLightRegionAxisArray(QDataStream *aStream, int count); + QVector Load_GfxDrawSurfArray(QDataStream *aStream, int count); + QVector Load_GfxSceneDynBrushArray(QDataStream *aStream, int count); + QVector Load_GfxSceneDynModelArray(QDataStream *aStream, int count); + QVector Load_GfxStreamingAabbTreeArray(QDataStream *aStream, int count); + GfxLightGridColors Load_GfxLightGridColors(QDataStream *aStream); + QVector Load_GfxLightGridColorsArray(QDataStream *aStream, int count); + QVector Load_GfxLightGridEntryArray(QDataStream *aStream, int count); + QVector Load_GfxCullGroupArray(QDataStream *aStream, int count); + QVector Load_StaticModelIndexArray(QDataStream *aStream, int count); + QVector Load_GfxStaticModelInstArray(QDataStream *aStream, int count); + ItemKeyHandler Load_ItemKeyHandler(QDataStream *aStream); + ItemKeyHandler Load_ItemKeyHandlerNext(QDataStream *aStream); + EditFieldDef Load_editFieldDef_t(QDataStream *aStream); + OperationEnum Load_Operator(QDataStream *aStream); + QVector Load_LeafBrushArray(QDataStream *aStream, int count); + CLeaf Load_cLeaf_t(QDataStream *aStream); + QVector Load_cmodel_tArray(QDataStream *aStream, int count); + QVector Load_CollisionAabbTreeArray(QDataStream *aStream, int count); + CollisionBorder Load_CollisionBorder(QDataStream *aStream); + QVector Load_CollisionBorderArray(QDataStream *aStream, int count); + CLeafBrushNodeChildren Load_cLeafBrushNodeChildren_t(QDataStream *aStream); + QVector Load_cLeaf_tArray(QDataStream *aStream, int count); + QVector Load_DynEntityClientArray(QDataStream *aStream, int count); + QVector Load_DynEntityPoseArray(QDataStream *aStream, int count); + QVector Load_DynEntityCollArray(QDataStream *aStream, int count); + QVector Load_FxTrailVertexArray(QDataStream *aStream, int count); + QVector Load_FxElemVelStateSampleArray(QDataStream *aStream, int count); + QVector Load_FxElemVisStateSampleArray(QDataStream *aStream, int count); + QVector Load_pathbasenode_tArray(QDataStream *aStream, int count); + QVector Load_pathlink_tArray(QDataStream *aStream, int count); + QVector Load_XModelHighMipBoundsArray(QDataStream *aStream, int count); + XModelCollSurf Load_XModelCollSurf(QDataStream *aStream); + quint8 Load_cbrushedge_t(QDataStream *aStream); + QVector Load_cbrushedge_tArray(QDataStream *aStream, size_t count); + CPlane Load_cplane_t(QDataStream *aStream); + CPlane Load_CPlane(QDataStream *aStream); + QVector Load_cplane_tArray(QDataStream *aStream, int count); + QVector Load_MaterialConstantDefArray(QDataStream *aStream, int count); + QVector Load_GfxStateBitsArray(QDataStream *aStream, int count); + MaterialArgumentCodeConst Load_MaterialArgumentCodeConst(QDataStream *aStream); + MaterialVertexDeclaration Load_MaterialVertexDeclaration(QDataStream *aStream); + QVector Load_byteShaderArray(QDataStream *aStream, size_t count); + QVector Load_byte4Array(QDataStream *aStream, size_t count); + QVector Load_GfxRawTextureArray(QDataStream *aStream, int count); + D3DCubeTexture Load_IDirect3DCubeTexture9(QDataStream *aStream); + D3DVolumeTexture Load_IDirect3DVolumeTexture9(QDataStream *aStream); + void Load_IDirect3DTexture9(QDataStream *aStream); + QVector Load_r_index16_tArray(QDataStream *aStream, int count); + QVector Load_r_index_tArray(QDataStream *aStream, int count); + D3DIndexBuffer Load_GfxIndexBuffer(QDataStream *aStream); + QVector Load_XBlendInfoArray(QDataStream *aStream, int count); + D3DVertexBuffer Load_GfxVertexBuffer(QDataStream *aStream); + QVector Load_XSurfaceCollisionNodeArray(QDataStream *aStream, int count); + QVector Load_XSurfaceCollisionLeafArray(QDataStream *aStream, int count); + QVector Load_GfxBrushModelArray(QDataStream *aStream, int count); + QVector Load_GfxPackedVertex0Array(QDataStream *aStream, int count); + void Load_GfxWorldVertex0Array(QDataStream *aStream, int count); + QVector Load_XAUDIOCHANNELMAPENTRYArray(QDataStream *aStream, int count); + StreamFileNamePacked Load_StreamFileNamePacked(QDataStream *aStream); + QVector Load_XaReverbSettingsArray(QDataStream *aStream, int count); + QVector Load_char2048Array(QDataStream *aStream, size_t count); + QVector Load_DObjAnimMatArray(QDataStream *aStream, int count); + QVector Load_XBoneInfoArray(QDataStream *aStream, int count); + QVector> Load_UShortVecArray(QDataStream *aStream, int count); + QVector> Load_ByteVecArray(QDataStream *aStream, int count); + QVector Load_dmaterial_tArray(QDataStream *aStream, int count); + QVector Load_ConstCharArray(QDataStream *aStream, size_t count); + quint16 Load_ScriptString(QDataStream *aStream); + QVector Load_UnsignedShortArray(QDataStream *aStream, int count); + QVector Load_XQuat2(QDataStream *aStream); + QVector> Load_XQuat2Array(QDataStream *aStream, int count); + QVector Load_ushortArray(QDataStream *aStream, int count); + QVector Load_shortArray(QDataStream *aStream, int count); + QVector Load_vec3_t(QDataStream *aStream); + QVector> Load_vec3_tArray(QDataStream *aStream, int count); + QVector> Load_vec2_tArray(QDataStream *aStream, int count); + QVector Load_raw_byte16Array(QDataStream *aStream, size_t count); + QVector Load_raw_byteArray(QDataStream *aStream, size_t count); + QVector Load_raw_uint128Array(QDataStream *aStream, int count); + QVector Load_raw_uintArray(QDataStream *aStream, int count); + float Load_float(QDataStream *aStream); + QVector Load_floatArray(QDataStream *aStream, int count); + uint Load_uint(QDataStream *aStream); + QVector Load_uintArray(QDataStream *aStream, int count); + QVector<_DWORD> Load_DWORDArray(QDataStream *aStream, int count); + QVector Load_byte4096Array(QDataStream *aStream, size_t count); + int Load_int(QDataStream *aStream); + QVector Load_intArray(QDataStream *aStream, int count); + char Load_char(QDataStream *aStream); + QVector Load_charArray(QDataStream *aStream, size_t count); + QVector Load_byteArray(QDataStream *aStream, size_t count); + GfxWorldDpvsPlanes Load_GfxWorldDpvsPlanes(QDataStream *aStream, GfxWorld aGfxWorld); + GfxWorldDpvsDynamic Load_GfxWorldDpvsDynamic(QDataStream *aStream, GfxWorld aGfxWorld); + GfxLightRegionHull Load_GfxLightRegionHull(QDataStream *aStream); + quint16 __ROL4__(quint16 value, quint16 bits); + GfxShadowGeometry Load_GfxShadowGeometry(QDataStream *aStream); + GfxWorldStreamInfo Load_GfxWorldStreamInfo(QDataStream *aStream); + GfxLightGrid Load_GfxLightGrid(QDataStream *aStream); + GfxWorldVertexLayerData Load_GfxWorldVertexLayerData(QDataStream *aStream, GfxWorld aGfxWorld); + GfxWorldVertexData Load_GfxWorldVertexData(QDataStream *aStream, GfxWorld aGfxWorld); + GfxAabbTree Load_GfxAabbTree(QDataStream *aStream); + QVector Load_GfxAabbTreeArray(QDataStream *aStream, int count); + GfxCell Load_GfxCell(QDataStream *aStream); + GfxPortal Load_GfxPortal(QDataStream *aStream); + QVector Load_GfxPortalArray(QDataStream *aStream, int count); + QString Load_XStringCustom(QDataStream *aStream); + QString Load_XString(QDataStream *aStream); + RawFile Load_RawFile(QDataStream *aStream); + LocalizeEntry Load_LocalizeEntry(QDataStream *aStream); + void Load_operandInternalDataUnion(QDataStream *aStream); + ComPrimaryLight Load_ComPrimaryLight(QDataStream *aStream); + CollisionPartition Load_CollisionPartition(QDataStream *aStream); + CLeafBrushNodeLeaf Load_CLeafBrushNodeLeaf(QDataStream *aStream, int leafBrushCount); + CLeafBrushNodeData Load_CLeafBrushNodeData(QDataStream *aStream, int aNodeCount); + MapEnts Load_MapEnts(QDataStream *aStream); + FxTrailDef Load_FxTrailDef(QDataStream *aStream); + FxEffectDefRef Load_FxEffectDefRef(QDataStream *aStream); + GameWorldMp Load_GameWorldMp(QDataStream *aStream); + QVector LoadPathNodeTreeArray(QDataStream *aStream, int count); + PathNodeTreeNodes Load_PathNodeTreeNodes(QDataStream *aStream); + PathNodeConstant Load_PathNodeConstant(QDataStream *aStream); + QVector Load_XModelCollSurfArray(QDataStream *aStream, int count); + PhysPreset Load_PhysPreset(QDataStream *aStream); + MaterialArgumentDef Load_MaterialArgumentDef(QDataStream *aStream, MaterialShaderArgument aArgument); + GfxPixelShaderLoadDef Load_GfxPixelShaderLoadDef(QDataStream *aStream); + GfxVertexShaderLoadDef Load_GfxVertexShaderLoadDef(QDataStream *aStream); + QVector Load_GfxImagePixels(QDataStream *aStream, GfxImage aGfxImage); + GfxTexture Load_GfxTexture(QDataStream *aStream, GfxTexture aGfxTexture, GfxImageLoadDef aGfxImageLoadDef); + XSurfaceVertexInfo Load_XSurfaceVertexInfo(QDataStream *aStream); + XSurfaceCollisionTree Load_XSurfaceCollisionTree(QDataStream *aStream); + MaterialInfo Load_MaterialInfo(QDataStream *aStream); + XAUDIOCHANNELMAP Load_XAUDIOCHANNELMAP(QDataStream *aStream); + SndCurve Load_SndCurve(QDataStream *aStream); + StreamFileNameRaw Load_StreamFileNameRaw(QDataStream *aStream); + SndDriverGlobals Load_SndDriverGlobals(QDataStream *aStream); + XaSeekTable Load_XaSeekTable(QDataStream *aStream); + XAUDIOPACKET_ALIGNED Load_XAUDIOPACKET_ALIGNED(QDataStream *aStream); + XAnimNotifyInfo Load_XAnimNotifyInfo(QDataStream *aStream); + XAnimDynamicFrames Load_XAnimDynamicFrames(QDataStream *aStream, XAnimPartTrans aXAnimPartTrans, XAnimDynamicIndices aXAnimDynamicIndices, XAnimDynamicFrames aXAnimDynamicFrames); + XAnimDynamicIndices Load_XAnimDynamicIndicesTrans(QDataStream *aStream, XAnimParts aXAnimParts, XAnimPartTrans aXAnimPartTrans); + XAnimDynamicIndices Load_XAnimDynamicIndicesDeltaQuat(QDataStream *aStream); + XAnimIndices Load_XAnimIndices(QDataStream *aStream, XAnimParts aXAnimParts, XAnimIndices aXAnimIndices); + QStringList Load_XStringArray(QDataStream *aStream, int count); + QVector Load_ScriptStringArray(QDataStream *aStream, int count); + QVector Load_GfxLightRegionHullArray(QDataStream *aStream, int count); + QVector Load_GfxShadowGeometryArray(QDataStream *aStream, int count); + StringTable Load_StringTable(QDataStream *aStream); + RawFile Load_RawFilePtr(QDataStream *aStream); + void Load_LocalizeEntryPtr(QDataStream *aStream); + MultiDef Load_MultiDef(QDataStream *aStream); + Operand Load_Operand(QDataStream *aStream); + QVector Load_ComPrimaryLightArray(QDataStream *aStream, int count); + CBrushSide Load_cbrushside_t(QDataStream *aStream); + CBrush Load_CBrush(QDataStream *aStream); + QVector Load_CollisionPartitionArray(QDataStream *aStream, int count); + CLeafBrushNode Load_CLeafBrushNode(QDataStream *aStream); + QVector Load_cNode_tArray(QDataStream *aStream, int count); + void Load_MapEntsPtr(QDataStream *aStream); + void Load_GameWorldMpPtr(QDataStream *aStream); + void Load_pathnode_tree_info_t(QDataStream *aStream); + void Load_pathnode_t(QDataStream *aStream); + void Load_cbrushside_tArray(QDataStream *aStream, int count); + void Load_PhysPresetPtr(QDataStream *aStream); + MaterialShaderArgument Load_MaterialShaderArgument(QDataStream *aStream); + MaterialPixelShaderProgram Load_MaterialPixelShaderProgram(QDataStream *aStream); + void Load_MaterialVertexShaderProgram(QDataStream *aStream); + GfxImageLoadDef Load_GfxImageLoadDef(QDataStream *aStream); + GfxTexture Load_GfxTextureLoad(QDataStream *aStream); + XRigidVertList Load_XRigidVertList(QDataStream *aStream); + void Load_snd_alias_list_name(QDataStream *aStream); + QVector Load_XAUDIOCHANNELMAPArray(QDataStream *aStream, int count); + SndCurve Load_SndCurvePtr(QDataStream *aStream); + void Load_StreamFileInfo(QDataStream *aStream); + void Load_SndDriverGlobalsPtr(QDataStream *aStream); + XaSound Load_XaSound(QDataStream *aStream); + QVector Load_XAnimNotifyInfoArray(QDataStream *aStream, int count); + void Load_XAnimPartTransFrames(QDataStream *aStream); + void Load_XAnimDeltaPartQuatDataFrames(QDataStream *aStream); + void Load_TempStringArray(QDataStream *aStream, int count); + GfxLightRegion Load_GfxLightRegion(QDataStream *aStream); + StringTable Load_StringTablePtr(QDataStream *aStream); + void Load_entryInternalData(QDataStream *aStream); + ComWorld Load_ComWorld(QDataStream *aStream); + QVector Load_cbrush_tArray(QDataStream *aStream, int count); + QVector Load_cLeafBrushNode_tArray(QDataStream *aStream, int count); + PathNodeTree Load_PathNodeTree(QDataStream *aStream); + void Load_pathnode_tArray(QDataStream *aStream, int count); + BrushWrapper Load_BrushWrapper(QDataStream *aStream); + void Load_MaterialShaderArgumentArray(QDataStream *aStream, int count); + MaterialPixelShader Load_MaterialPixelShader(QDataStream *aStream); + void Load_MaterialVertexShader(QDataStream *aStream); + GfxImage Load_GfxImage(QDataStream *aStream); + void Load_XRigidVertListArray(QDataStream *aStream, int count); + void Load_snd_alias_list_nameArray(QDataStream *aStream, int count); + void Load_SpeakerMapChannel(QDataStream *aStream); + void Load_LoadedSound(QDataStream *aStream); + void Load_StreamFileName(QDataStream *aStream); + void Load_XAnimPartTransData(QDataStream *aStream); + void Load_XAnimDeltaPartQuatData(QDataStream *aStream); + void Load_ScriptStringList(QDataStream *aStream); + void Load_GfxLightRegionArray(QDataStream *aStream, int count); + void Load_GfxCellArray(QDataStream *aStream, int count); + void Load_expressionEntry(QDataStream *aStream); + void Load_ComWorldPtr(QDataStream *aStream); + void Load_pathnode_tree_tArray(QDataStream *aStream, int count); + void Load_MaterialPixelShaderPtr(QDataStream *aStream); + void Load_GfxImagePtr(QDataStream *aStream); + void Load_XSurface(QDataStream *aStream); + void Load_SpeakerMapChannelArray(QDataStream *aStream, int count); + void Load_StreamedSound(QDataStream *aStream); + void Load_LoadedSoundPtr(QDataStream *aStream); + void Load_XAnimPartTrans(QDataStream *aStream); + void Load_XAnimDeltaPartQuat(QDataStream *aStream); + void Load_GfxReflectionProbe(QDataStream *aStream); + void Load_PathData(QDataStream *aStream); + void Load_PhysGeomInfoArray(QDataStream *aStream, int count); + void Load_GfxLightmapArray(QDataStream *aStream); + void Load_GfxLightImage(QDataStream *aStream); + void Load_MaterialVertexShaderPtrArray(QDataStream *aStream, int count); + void Load_water_t(QDataStream *aStream); + void Load_XSurfaceArray(QDataStream *aStream, int count); + void Load_SpeakerMap(QDataStream *aStream); + void Load_SoundFileRef(QDataStream *aStream); + void Load_XAnimDeltaPart(QDataStream *aStream); + void Load_GfxReflectionProbeArray(QDataStream *aStream, int count); + void Load_expressionEntry_ptrArray(QDataStream *aStream, int count); + void Load_GameWorldSp(QDataStream *aStream); + void Load_PhysGeomList(QDataStream *aStream); + void Load_GfxLightmapArrayArray(QDataStream *aStream, int count); + void Load_GfxLightDef(QDataStream *aStream); + void Load_MaterialTextureDefInfo(QDataStream *aStream); + void Load_MaterialPass(QDataStream *aStream); + void Load_SoundFile(QDataStream *aStream); + void Load_XAnimParts(QDataStream *aStream); + void Load_statement(QDataStream *aStream); + void Load_GameWorldSpPtr(QDataStream *aStream); + void Load_GfxLightDefPtr(QDataStream *aStream); + void Load_MaterialTextureDef(QDataStream *aStream); + void Load_MaterialPassArray(QDataStream *aStream, int count); + void Load_snd_alias_t(QDataStream *aStream); + void Load_XAnimPartsPtr(QDataStream *aStream); + void Load_GfxLight(QDataStream *aStream); + void Load_MaterialTextureDefArray(QDataStream *aStream, int count); + void Load_MaterialTechnique(QDataStream *aStream); + void Load_snd_alias_tArray(QDataStream *aStream, int count); + void Load_snd_alias_list_t(QDataStream *aStream); + void Load_MaterialTechniquePtrArray(QDataStream *aStream, int count); + void Load_snd_alias_list_ptr(QDataStream *aStream); + void Load_MaterialTechniqueSet(QDataStream *aStream); + void Load_MaterialTechniqueSetPtr(QDataStream *aStream); + void Load_Material(QDataStream *aStream); + void Load_MaterialHandle(QDataStream *aStream); + void Load_Font(QDataStream *aStream); + void Load_MaterialMemory(QDataStream *aStream); + void Load_sunflare_t(QDataStream *aStream); + void Load_windowDef_t(QDataStream *aStream); + void Load_listBoxDef_t(QDataStream *aStream); + void Load_GfxSurface(QDataStream *aStream); + void Load_MaterialHandleArray(QDataStream *aStream, int count); + void Load_FontHandle(QDataStream *aStream); + void Load_MaterialMemoryArray(QDataStream *aStream, int count); + void Load_Window(QDataStream *aStream); + void Load_FxElemMarkVisuals(QDataStream *aStream); + void Load_XModel(QDataStream *aStream); + void Load_GfxSurfaceArray(QDataStream *aStream, int count); + void Load_itemDefData_t(QDataStream *aStream); + void Load_FxElemMarkVisualsArray(QDataStream *aStream, int count); + void Load_XModelPtr(QDataStream *aStream); + void Load_GfxStaticModelDrawInst(QDataStream *aStream); + void Load_itemDef_t(QDataStream *aStream); + void Load_cStaticModel_t(QDataStream *aStream); + void Load_FxElemVisuals(QDataStream *aStream); + void Load_XModelPiece(QDataStream *aStream); }; #endif // ASSETS_H diff --git a/libs/assets/assets.pro b/libs/assets/assets.pro index 9895349..014c1d5 100644 --- a/libs/assets/assets.pro +++ b/libs/assets/assets.pro @@ -5,6 +5,36 @@ CONFIG += staticlib c++17 SOURCES += \ # Base class assets.cpp \ + animparts.cpp \ + asset.cpp \ + assetlist.cpp \ + clipmap.cpp \ + comworld.cpp \ + d3dresource.cpp \ + effectdef.cpp \ + effecttable.cpp \ + file.cpp \ + font.cpp \ + gameworld.cpp \ + gfximage.cpp \ + gfxlightdef.cpp \ + gfxworld.cpp \ + loadedsound.cpp \ + localizeentry.cpp \ + mapent.cpp \ + material.cpp \ + materialpixelshader.cpp \ + materialtechset.cpp \ + menudef.cpp \ + menulist.cpp \ + model.cpp \ + rawfile.cpp \ + scriptstringlist.cpp \ + soundalias.cpp \ + soundcurve.cpp \ + sounddriver.cpp \ + stringtable.cpp \ + weapondef.cpp \ # 360 classes 360/assets_cod2_360.cpp \ 360/assets_cod4_360.cpp \ @@ -49,6 +79,7 @@ HEADERS += \ animparts.h \ asset.h \ assetlist.h \ + assetmap.h \ assets.h \ # 360 classes 360/assets_cod2_360.h \ @@ -109,6 +140,7 @@ HEADERS += \ menulist.h \ model.h \ rawfile.h \ + scriptstringlist.h \ soundalias.h \ soundcurve.h \ sounddriver.h \ @@ -119,11 +151,9 @@ LIBS += \ -L$$OUT_PWD/../libs/core -lcore INCLUDEPATH += \ - $$PWD/../core \ - $$PWD/../../third_party/dx9_sdk/include + $$PWD/../core DEPENDPATH += \ - $$PWD/../core \ - $$PWD/../../third_party/dx9_sdk/include + $$PWD/../core DESTDIR = $$OUT_PWD/../ diff --git a/libs/assets/clipmap.cpp b/libs/assets/clipmap.cpp new file mode 100644 index 0000000..37d1ece --- /dev/null +++ b/libs/assets/clipmap.cpp @@ -0,0 +1 @@ +#include "clipmap.h" diff --git a/libs/assets/clipmap.h b/libs/assets/clipmap.h index 28e4f6a..bd69643 100644 --- a/libs/assets/clipmap.h +++ b/libs/assets/clipmap.h @@ -29,11 +29,11 @@ struct dmaterial_t struct cNode_t { - cplane_s *plane; + CPlane *plane; __int16 children[2]; }; -struct cLeaf_t +struct CLeaf { unsigned __int16 firstCollAabbIndex; unsigned __int16 collAabbCount; @@ -45,30 +45,30 @@ struct cLeaf_t __int16 cluster; }; -struct cLeafBrushNodeLeaf_t +struct CLeafBrushNodeLeaf { unsigned __int16 *brushes; }; -struct cLeafBrushNodeChildren_t +struct CLeafBrushNodeChildren { float dist; float range; unsigned __int16 childOffset[2]; }; -union cLeafBrushNodeData_t +union CLeafBrushNodeData { - cLeafBrushNodeLeaf_t leaf; - cLeafBrushNodeChildren_t children; + CLeafBrushNodeLeaf leaf; + CLeafBrushNodeChildren children; }; -struct cLeafBrushNode_s +struct CLeafBrushNode { unsigned __int8 axis; __int16 leafBrushCount; int contents; - cLeafBrushNodeData_t data; + CLeafBrushNodeData data; }; struct CollisionBorder @@ -103,21 +103,21 @@ struct CollisionAabbTree CollisionAabbTreeIndex u; }; -struct cmodel_t +struct CModel { float mins[3]; float maxs[3]; float radius; - cLeaf_t leaf; + CLeaf leaf; }; -struct __declspec(align(16)) cbrush_t +struct __declspec(align(16)) CBrush { float mins[3]; int contents; float maxs[3]; unsigned int numsides; - cbrushside_t *sides; + CBrushSide *sides; __int16 axialMaterialNum[2][3]; unsigned __int8 *baseAdjacentSide; __int16 firstAdjacentSideOffsets[2][3]; @@ -181,21 +181,21 @@ struct ClipMap const char *name; int isInUse; int planeCount; - cplane_s *planes; + CPlane *planes; unsigned int numStaticModels; cStaticModel_s *staticModelList; unsigned int numMaterials; dmaterial_t *materials; unsigned int numBrushSides; - cbrushside_t *brushsides; + CBrushSide *brushsides; unsigned int numBrushEdges; unsigned __int8 *brushEdges; unsigned int numNodes; cNode_t *nodes; unsigned int numLeafs; - cLeaf_t *leafs; + CLeaf *leafs; unsigned int leafbrushNodesCount; - cLeafBrushNode_s *leafbrushNodes; + CLeafBrushNode *leafbrushNodes; unsigned int numLeafBrushes; unsigned __int16 *leafbrushes; unsigned int numLeafSurfaces; @@ -212,16 +212,16 @@ struct ClipMap int aabbTreeCount; CollisionAabbTree *aabbTrees; unsigned int numSubModels; - cmodel_t *cmodels; + CModel *cmodels; unsigned __int16 numBrushes; - cbrush_t *brushes; + CBrush *brushes; int numClusters; int clusterBytes; unsigned __int8 *visibility; int vised; MapEnts *mapEnts; - cbrush_t *box_brush; - cmodel_t box_model; + CBrush *box_brush; + CModel box_model; unsigned __int16 dynEntCount[2]; DynEntityDef *dynEntDefList[2]; DynEntityPose *dynEntPoseList[2]; diff --git a/libs/assets/comworld.cpp b/libs/assets/comworld.cpp new file mode 100644 index 0000000..097c80e --- /dev/null +++ b/libs/assets/comworld.cpp @@ -0,0 +1 @@ +#include "comworld.h" diff --git a/libs/assets/d3dresource.cpp b/libs/assets/d3dresource.cpp new file mode 100644 index 0000000..b72c75b --- /dev/null +++ b/libs/assets/d3dresource.cpp @@ -0,0 +1 @@ +#include "d3dresource.h" diff --git a/libs/assets/effectdef.cpp b/libs/assets/effectdef.cpp new file mode 100644 index 0000000..889b4a8 --- /dev/null +++ b/libs/assets/effectdef.cpp @@ -0,0 +1 @@ +#include "effectdef.h" diff --git a/libs/assets/effectdef.h b/libs/assets/effectdef.h index dbf6cf1..be05986 100644 --- a/libs/assets/effectdef.h +++ b/libs/assets/effectdef.h @@ -79,29 +79,45 @@ struct FxElemVisStateSample struct FxElemMarkVisuals { - Material *materials[2]; + qint32 materialPtrs[2]; + QVector materials; }; struct EffectDef; union EffectDefRef { + qint32 handlePtr; const EffectDef *handle; + + qint32 namePtr; const char *name; }; union FxElemVisuals { + qint32 anonymousPtr; const void *anonymous; + + qint32 materialPtr; Material *material; + + qint32 modelPtr; Model *model; + EffectDefRef effectDef; + + qint32 soundNamePtr; const char *soundName; }; -union FxElemDefVisuals +struct FxElemDefVisuals { - FxElemMarkVisuals *markArray; - FxElemVisuals *array; + qint32 markArrayPtr; + QVector markArray; + + qint32 arrayPtr; + QVector array; + FxElemVisuals instance; }; @@ -146,8 +162,10 @@ struct FxElemDef unsigned __int8 visualCount; unsigned __int8 velIntervalCount; unsigned __int8 visStateIntervalCount; - const FxElemVelStateSample *velSamples; - const FxElemVisStateSample *visSamples; + qint32 velSamplesPtr; + QVector velSamples; + qint32 visSamplesPtr; + QVector visSamples; FxElemDefVisuals visuals; float collMins[3]; float collMaxs[3]; @@ -156,7 +174,10 @@ struct FxElemDef EffectDefRef effectEmitted; FxFloatRange emitDist; FxFloatRange emitDistVariance; + + qint32 trailDefPtr; FxTrailDef *trailDef; + unsigned __int8 sortOrder; unsigned __int8 lightingFrac; unsigned __int8 useItemClip; @@ -165,14 +186,18 @@ struct FxElemDef struct EffectDef { - const char *name; + qint32 namePtr; + QString name; + int flags; int totalSize; int msecLoopingLife; int elemDefCountLooping; int elemDefCountOneShot; int elemDefCountEmission; - const FxElemDef *elemDefs; + + qint32 elemDefsPtr; + QVector elemDefs; }; #endif // EFFECTDEF_H diff --git a/libs/assets/effecttable.cpp b/libs/assets/effecttable.cpp new file mode 100644 index 0000000..66a2fbd --- /dev/null +++ b/libs/assets/effecttable.cpp @@ -0,0 +1 @@ +#include "effecttable.h" diff --git a/libs/assets/effecttable.h b/libs/assets/effecttable.h index e288f4c..97daf30 100644 --- a/libs/assets/effecttable.h +++ b/libs/assets/effecttable.h @@ -5,14 +5,20 @@ struct FxImpactEntry { - const EffectDef *nonflesh[29]; - const EffectDef *flesh[4]; + QVector nonFleshPtrs; + QVector nonFlesh; + + QVector fleshPtrs; + QVector flesh; }; struct ImpactTable { - const char *name; - FxImpactEntry *table; + qint32 namePtr; + QString name; + + qint32 tablePtr; + QVector table; }; #endif // EFFECTTABLE_H diff --git a/libs/assets/file.cpp b/libs/assets/file.cpp new file mode 100644 index 0000000..3e2f550 --- /dev/null +++ b/libs/assets/file.cpp @@ -0,0 +1 @@ +#include "file.h" diff --git a/libs/assets/font.cpp b/libs/assets/font.cpp new file mode 100644 index 0000000..4d5fdc3 --- /dev/null +++ b/libs/assets/font.cpp @@ -0,0 +1 @@ +#include "font.h" diff --git a/libs/assets/gameworld.cpp b/libs/assets/gameworld.cpp new file mode 100644 index 0000000..cbd9fc9 --- /dev/null +++ b/libs/assets/gameworld.cpp @@ -0,0 +1 @@ +#include "gameworld.h" diff --git a/libs/assets/gameworld.h b/libs/assets/gameworld.h index 94ec094..18df25a 100644 --- a/libs/assets/gameworld.h +++ b/libs/assets/gameworld.h @@ -27,7 +27,7 @@ enum nodeType : __int32 NODE_DONTLINK = 0x14, }; -struct pathlink_s +struct PathLink { float fDist; unsigned __int16 nodeNum; @@ -36,7 +36,7 @@ struct pathlink_s unsigned __int8 ubBadPlaceCount[4]; }; -struct pathnode_constant_t +struct PathNodeConstant { nodeType type; unsigned __int16 spawnflags; @@ -56,7 +56,7 @@ struct pathnode_constant_t __int16 wChainDepth; __int16 wChainParent; unsigned __int16 totalLinkCount; - pathlink_s *Links; + PathLink *Links; }; struct pathnode_dynamic_t @@ -85,49 +85,49 @@ struct pathnode_transient_t struct pathnode_t { - pathnode_constant_t constant; + PathNodeConstant constant; pathnode_dynamic_t dynamic; pathnode_transient_t transient; }; -struct pathbasenode_t +struct PathBaseNode { float vOrigin[3]; unsigned int type; }; -struct pathnode_tree_nodes_t +struct PathNodeTreeNodes { int nodeCount; unsigned __int16 *nodes; }; -struct pathnode_tree_t; -union pathnode_tree_info_t +struct PathNodeTree; +union PathNodeTreeInfo { - pathnode_tree_t *child[2]; - pathnode_tree_nodes_t s; + PathNodeTree *child[2]; + PathNodeTreeNodes s; }; -struct pathnode_tree_t +struct PathNodeTree { int axis; float dist; - pathnode_tree_info_t u; + PathNodeTreeInfo u; }; struct PathData { unsigned int nodeCount; pathnode_t *nodes; - pathbasenode_t *basenodes; + PathBaseNode *basenodes; unsigned int chainNodeCount; unsigned __int16 *chainNodeForNode; unsigned __int16 *nodeForChainNode; int visBytes; unsigned __int8 *pathVis; int nodeTreeCount; - pathnode_tree_t *nodeTree; + PathNodeTree *nodeTree; }; struct GameWorldSp diff --git a/libs/assets/gfximage.cpp b/libs/assets/gfximage.cpp new file mode 100644 index 0000000..039dfda --- /dev/null +++ b/libs/assets/gfximage.cpp @@ -0,0 +1 @@ +#include "gfximage.h" diff --git a/libs/assets/gfximage.h b/libs/assets/gfximage.h index 260d3ce..38b2e0e 100644 --- a/libs/assets/gfximage.h +++ b/libs/assets/gfximage.h @@ -4,20 +4,29 @@ #include "material.h" struct GfxImageLoadDef; -union GfxTexture +struct GfxTexture { - D3DBaseTexture *basemap; + qint32 baseMapPtr; + D3DBaseTexture *baseMap; + + qint32 mapPtr; D3DTexture *map; - D3DVolumeTexture *volmap; - D3DCubeTexture *cubemap; + + qint32 volMapPtr; + D3DVolumeTexture *volMap; + + qint32 cubeMapPtr; + D3DCubeTexture *cubeMap; + + qint32 loadDefPtr; GfxImageLoadDef *loadDef; }; struct GfxImageLoadDef { - unsigned __int8 levelCount; - unsigned __int8 flags; - __int16 dimensions[3]; + quint8 levelCount; + quint8 flags; + quint16 dimensions[3]; int format; GfxTexture texture; }; @@ -31,18 +40,23 @@ struct GfxImage { MapType mapType; GfxTexture texture; - unsigned __int8 semantic; + quint8 semantic; CardMemory cardMemory; - unsigned __int16 width; - unsigned __int16 height; - unsigned __int16 depth; - unsigned __int8 category; + quint16 width; + quint16 height; + quint16 depth; + quint8 category; bool delayLoadPixels; - unsigned __int8 *pixels; + + qint32 pixelsPtr; + quint8 *pixels; + unsigned int baseSize; - unsigned __int16 streamSlot; + quint16 streamSlot; bool streaming; - const char *name; + + qint32 namePtr; + QString name; }; #endif // GFXIMAGE_H diff --git a/libs/assets/gfxlightdef.cpp b/libs/assets/gfxlightdef.cpp new file mode 100644 index 0000000..2cb1fef --- /dev/null +++ b/libs/assets/gfxlightdef.cpp @@ -0,0 +1 @@ +#include "gfxlightdef.h" diff --git a/libs/assets/gfxworld.cpp b/libs/assets/gfxworld.cpp new file mode 100644 index 0000000..621d727 --- /dev/null +++ b/libs/assets/gfxworld.cpp @@ -0,0 +1 @@ +#include "gfxworld.h" diff --git a/libs/assets/gfxworld.h b/libs/assets/gfxworld.h index ea352b3..8427ddb 100644 --- a/libs/assets/gfxworld.h +++ b/libs/assets/gfxworld.h @@ -84,7 +84,7 @@ struct GfxReflectionProbe struct GfxWorldDpvsPlanes { int cellCount; - cplane_s *planes; + CPlane *planes; unsigned __int16 *nodes; unsigned int *sceneEntCellBits; }; @@ -352,7 +352,7 @@ struct GfxWorldDpvsStatic GfxSurface *surfaces; GfxCullGroup *cullGroups; GfxStaticModelDrawInst *smodelDrawInsts; - GfxDrawSurf *surfaceMaterials; + GfxDrawSurfFields *surfaceMaterials; unsigned int *surfaceCastsSunShadow; volatile int usageCount; }; diff --git a/libs/assets/loadedsound.cpp b/libs/assets/loadedsound.cpp new file mode 100644 index 0000000..570a871 --- /dev/null +++ b/libs/assets/loadedsound.cpp @@ -0,0 +1 @@ +#include "loadedsound.h" diff --git a/libs/assets/localizeentry.cpp b/libs/assets/localizeentry.cpp new file mode 100644 index 0000000..868eed5 --- /dev/null +++ b/libs/assets/localizeentry.cpp @@ -0,0 +1 @@ +#include "localizeentry.h" diff --git a/libs/assets/mapent.cpp b/libs/assets/mapent.cpp new file mode 100644 index 0000000..985d8c6 --- /dev/null +++ b/libs/assets/mapent.cpp @@ -0,0 +1 @@ +#include "mapent.h" diff --git a/libs/assets/material.cpp b/libs/assets/material.cpp new file mode 100644 index 0000000..558db9a --- /dev/null +++ b/libs/assets/material.cpp @@ -0,0 +1 @@ +#include "material.h" diff --git a/libs/assets/material.h b/libs/assets/material.h index bf3d66d..e27ac40 100644 --- a/libs/assets/material.h +++ b/libs/assets/material.h @@ -5,35 +5,31 @@ struct GfxDrawSurfFields { - unsigned __int64 objectId : 16; - unsigned __int64 reflectionProbeIndex : 8; - unsigned __int64 customIndex : 5; - unsigned __int64 materialSortedIndex : 11; - unsigned __int64 prepass : 2; - unsigned __int64 primaryLightIndex : 8; - unsigned __int64 surfType : 4; - unsigned __int64 primarySortKey : 6; - unsigned __int64 unused : 4; + quint64 objectId : 16; + quint64 reflectionProbeIndex : 8; + quint64 customIndex : 5; + quint64 materialSortedIndex : 11; + quint64 prepass : 2; + quint64 primaryLightIndex : 8; + quint64 surfType : 4; + quint64 primarySortKey : 6; + quint64 unused : 4; }; -union GfxDrawSurf +struct MaterialInfo { - GfxDrawSurfFields fields; - unsigned __int64 packed; -}; + qint32 namePtr; + QString name; -struct __declspec(align(8)) MaterialInfo -{ - const char *name; - unsigned __int8 gameFlags; - unsigned __int8 sortKey; - unsigned __int8 textureAtlasRowCount; - unsigned __int8 textureAtlasColumnCount; - GfxDrawSurf drawSurf; + quint8 gameFlags; + quint8 sortKey; + quint8 textureAtlasRowCount; + quint8 textureAtlasColumnCount; + GfxDrawSurfFields drawSurf; unsigned int surfaceTypeBits; }; -enum MapType : __int32 +enum MapType : qint32 { MAPTYPE_NONE = 0x0, MAPTYPE_INVALID1 = 0x1, @@ -46,48 +42,49 @@ enum MapType : __int32 struct GPUTEXTURESIZE_1D { - unsigned __int32 Width : 24; + quint32 Width : 24; }; struct GPUTEXTURESIZE_2D { - unsigned __int32 Width : 13; - unsigned __int32 Height : 13; + quint32 Width : 13; + quint32 Height : 13; }; struct GPUTEXTURESIZE_3D { - unsigned __int32 Width : 11; - unsigned __int32 Height : 11; - unsigned __int32 Depth : 10; + quint32 Width : 11; + quint32 Height : 11; + quint32 Depth : 10; }; struct GPUTEXTURESIZE_STACK { - unsigned __int32 Width : 13; - unsigned __int32 Height : 13; - unsigned __int32 Depth : 6; + quint32 Width : 13; + quint32 Height : 13; + quint32 Depth : 6; }; -struct $FD14676823C8BF1A2A32FD1720A565E9 +struct GPUTEXTURE_FETCH_CONSTANT { - unsigned __int32 Type : 2; - unsigned __int32 SignX : 2; - unsigned __int32 SignY : 2; - unsigned __int32 SignZ : 2; - unsigned __int32 SignW : 2; - unsigned __int32 ClampX : 3; - unsigned __int32 ClampY : 3; - unsigned __int32 ClampZ : 3; - unsigned __int32 : 3; - unsigned __int32 Pitch : 9; - unsigned __int32 Tiled : 1; - unsigned __int32 DataFormat : 6; - unsigned __int32 Endian : 2; - unsigned __int32 RequestSize : 2; - unsigned __int32 Stacked : 1; - unsigned __int32 ClampPolicy : 1; - unsigned __int32 BaseAddress : 20; + quint32 Type : 2; + quint32 SignX : 2; + quint32 SignY : 2; + quint32 SignZ : 2; + quint32 SignW : 2; + quint32 ClampX : 3; + quint32 ClampY : 3; + quint32 ClampZ : 3; + quint32 : 3; + quint32 Pitch : 9; + quint32 Tiled : 1; + + quint32 DataFormat : 6; + quint32 Endian : 2; + quint32 RequestSize : 2; + quint32 Stacked : 1; + quint32 ClampPolicy : 1; + quint32 BaseAddress : 20; union { GPUTEXTURESIZE_1D OneD; @@ -95,41 +92,99 @@ struct $FD14676823C8BF1A2A32FD1720A565E9 GPUTEXTURESIZE_3D ThreeD; GPUTEXTURESIZE_STACK Stack; } Size; - unsigned __int32 NumFormat : 1; - unsigned __int32 SwizzleX : 3; - unsigned __int32 SwizzleY : 3; - unsigned __int32 SwizzleZ : 3; - unsigned __int32 SwizzleW : 3; - __int32 ExpAdjust : 6; - unsigned __int32 MagFilter : 2; - unsigned __int32 MinFilter : 2; - unsigned __int32 MipFilter : 2; - unsigned __int32 AnisoFilter : 3; - unsigned __int32 : 3; - unsigned __int32 BorderSize : 1; - unsigned __int32 VolMagFilter : 1; - unsigned __int32 VolMinFilter : 1; - unsigned __int32 MinMipLevel : 4; - unsigned __int32 MaxMipLevel : 4; - unsigned __int32 MagAnisoWalk : 1; - unsigned __int32 MinAnisoWalk : 1; - __int32 LODBias : 10; - __int32 GradExpAdjustH : 5; - __int32 GradExpAdjustV : 5; - unsigned __int32 BorderColor : 2; - unsigned __int32 ForceBCWToMax : 1; - unsigned __int32 TriClamp : 2; - __int32 AnisoBias : 4; - unsigned __int32 Dimension : 2; - unsigned __int32 PackedMips : 1; - unsigned __int32 MipAddress : 20; + + quint32 NumFormat : 1; + quint32 SwizzleX : 3; + quint32 SwizzleY : 3; + quint32 SwizzleZ : 3; + quint32 SwizzleW : 3; + qint32 ExpAdjust : 6; + quint32 MagFilter : 2; + quint32 MinFilter : 2; + quint32 MipFilter : 2; + quint32 AnisoFilter : 3; + quint32 : 3; + quint32 BorderSize : 1; + + quint32 VolMagFilter : 1; + quint32 VolMinFilter : 1; + quint32 MinMipLevel : 4; + quint32 MaxMipLevel : 4; + quint32 MagAnisoWalk : 1; + quint32 MinAnisoWalk : 1; + qint32 LODBias : 10; + qint32 GradExpAdjustH : 5; + qint32 GradExpAdjustV : 5; + + quint32 BorderColor : 2; + quint32 ForceBCWToMax : 1; + quint32 TriClamp : 2; + qint32 AnisoBias : 4; + quint32 Dimension : 2; + quint32 PackedMips : 1; + quint32 MipAddress : 20; }; -union GPUTEXTURE_FETCH_CONSTANT -{ - $FD14676823C8BF1A2A32FD1720A565E9 __s0; - unsigned int dword[6]; -}; +// QDataStream &operator>>(QDataStream &in, GPUTEXTURE_FETCH_CONSTANT &s) +// { +// quint32 raw1, raw2, raw3, raw4, raw5; +// in >> raw1 >> raw2 >> raw3 >> raw4 >> raw5; + +// s.Type = raw1 & 0b000000000000000000000011; +// s.SignX = (raw1 >> 2) & 0b000000000000000000000011; +// s.SignY = (raw1 >> 4) & 0b000000000000000000000011; +// s.SignZ = (raw1 >> 6) & 0b000000000000000000000011; +// s.SignW = (raw1 >> 8) & 0b000000000000000000000011; +// s.ClampX = (raw1 >> 10) & 0b000000000000000000000111; +// s.ClampY = (raw1 >> 13) & 0b000000000000000000000111; +// s.ClampZ = (raw1 >> 16) & 0b000000000000000000000111; +// s.Pitch = (raw1 >> 22) & 0b000000000000000111111111; +// s.Tiled = (raw1 >> 31) & 0b000000000000000000000001; + +// s.DataFormat = raw2 & 0b000000000000000000111111; +// s.Endian = (raw2 >> 6) & 0b000000000000000000000011; +// s.RequestSize = (raw2 >> 8) & 0b000000000000000000000011; +// s.Stacked = (raw2 >> 10) & 0b000000000000000000000001; +// s.ClampPolicy = (raw2 >> 11) & 0b000000000000000000000001; +// s.BaseAddress = (raw2 >> 12) & 0b000011111111111111111111; +// s.Size = (raw2 >> 32) & 0b000000000000000000001111; + +// s.NumFormat = raw3 & 0b000000000000000000000001; +// s.SwizzleX = (raw3 >> 32) & 0b000000000000000000000111; +// s.SwizzleY = (raw3 >> 32) & 0b000000000000000000000111; +// s.SwizzleZ = (raw3 >> 32) & 0b000000000000000000000111; +// s.SwizzleW = (raw3 >> 32) & 0b000000000000000000000111; +// s.ExpAdjust = (raw3 >> 32) & 0b000000000000000000111111; +// s.MagFilter = (raw3 >> 32) & 0b000000000000000000001111; +// s.MinFilter = (raw3 >> 32) & 0b000000000000000000001111; +// s.MipFilter = (raw3 >> 32) & 0b000000000000000000001111; +// s.AnisoFilter = (raw3 >> 32) & 0b000000000000000000001111; +// s.: 3; +// s.BorderSize = +// s.VolMagFilter = +// s.VolMinFilter = +// s.MinMipLevel = +// s.MaxMipLevel = +// s.MagAnisoWalk = +// s.MinAnisoWalk = +// s.LODBias = +// s.GradExpAdjustH = +// s.GradExpAdjustV = +// s.BorderColor = +// s.ForceBCWToMax = +// s.TriClamp = +// s.AnisoBias = +// s.Dimension = +// s.PackedMips = +// s.MipAddress = + + + + + + +// return in; +// } struct D3DBaseTexture : D3DResource { @@ -184,8 +239,8 @@ struct MaterialTextureDef unsigned int nameHash; char nameStart; char nameEnd; - unsigned __int8 samplerState; - unsigned __int8 semantic; + quint8 samplerState; + quint8 semantic; MaterialTextureDefInfo u; }; @@ -204,15 +259,24 @@ struct GfxStateBits struct Material { MaterialInfo info; - unsigned __int8 stateBitsEntry[26]; - unsigned __int8 textureCount; - unsigned __int8 constantCount; - unsigned __int8 stateBitsCount; - unsigned __int8 stateFlags; - unsigned __int8 cameraRegion; + + quint8 stateBitsEntry[26]; + quint8 textureCount; + quint8 constantCount; + quint8 stateBitsCount; + quint8 stateFlags; + quint8 cameraRegion; + + qint32 techSetPtr; MaterialTechSet *techniqueSet; + + qint32 textureTablePtr; MaterialTextureDef *textureTable; + + qint32 constantTablePtr; MaterialConstantDef *constantTable; + + qint32 stateBitsTablePtr; GfxStateBits *stateBitsTable; }; diff --git a/libs/assets/materialpixelshader.cpp b/libs/assets/materialpixelshader.cpp new file mode 100644 index 0000000..b3f36dd --- /dev/null +++ b/libs/assets/materialpixelshader.cpp @@ -0,0 +1 @@ +#include "materialpixelshader.h" diff --git a/libs/assets/materialpixelshader.h b/libs/assets/materialpixelshader.h index a5f608c..d60671b 100644 --- a/libs/assets/materialpixelshader.h +++ b/libs/assets/materialpixelshader.h @@ -2,13 +2,17 @@ #define MATERIAL_PIXERHSHADER_H #include "d3dresource.h" +#include "qcontainerfwd.h" +#include "qtypes.h" struct GfxPixelShaderLoadDef { - unsigned __int8 *cachedPart; - unsigned __int8 *physicalPart; - unsigned __int16 cachedPartSize; - unsigned __int16 physicalPartSize; + quint16 cachedPartPtr; + QVector cachedPart; + quint16 physicalPartPtr; + QVector physicalPart; + quint16 cachedPartSize; + quint16 physicalPartSize; }; struct D3DPixelShader : D3DResource diff --git a/libs/assets/materialtechset.cpp b/libs/assets/materialtechset.cpp new file mode 100644 index 0000000..fadfbe0 --- /dev/null +++ b/libs/assets/materialtechset.cpp @@ -0,0 +1 @@ +#include "materialtechset.h" diff --git a/libs/assets/materialtechset.h b/libs/assets/materialtechset.h index deeb65e..cde9fb5 100644 --- a/libs/assets/materialtechset.h +++ b/libs/assets/materialtechset.h @@ -36,8 +36,10 @@ struct D3DVertexShader : D3DResource struct GfxVertexShaderLoadDef { - int *cachedPart; - int *physicalPart; + qint32 cachedPartPtr; + QVector cachedPart; + qint32 physicalPartPtr; + QVector physicalPart; int cachedPartSize; int physicalPartSize; }; @@ -102,7 +104,11 @@ struct MaterialTechSet { QString name; int worldVertFormat; + + qint32 remappedPtr; std::shared_ptr remappedTechniqueSet; + + QVector techPtrs; QVector> techniques; }; diff --git a/libs/assets/menudef.cpp b/libs/assets/menudef.cpp new file mode 100644 index 0000000..a635aec --- /dev/null +++ b/libs/assets/menudef.cpp @@ -0,0 +1 @@ +#include "menudef.h" diff --git a/libs/assets/menudef.h b/libs/assets/menudef.h index f34ef3e..4e297c4 100644 --- a/libs/assets/menudef.h +++ b/libs/assets/menudef.h @@ -42,7 +42,7 @@ struct ItemKeyHandler ItemKeyHandler *next; }; -enum operationEnum : __int32 +enum OperationEnum : __int32 { OP_NOOP = 0x0, OP_RIGHTPAREN = 0x1, @@ -135,7 +135,7 @@ enum expDataType : __int32 VAL_STRING = 0x2, }; -union operandInternalDataUnion +union OperandInternalDataUnion { int intVal; float floatVal; @@ -145,12 +145,12 @@ union operandInternalDataUnion struct Operand { expDataType dataType; - operandInternalDataUnion internals; + OperandInternalDataUnion internals; }; union entryInternalData { - operationEnum op; + OperationEnum op; Operand operand; }; @@ -193,7 +193,7 @@ struct listBoxDef_s Material *selectIcon; }; -struct editFieldDef_s +struct EditFieldDef { float minVal; float maxVal; @@ -205,7 +205,7 @@ struct editFieldDef_s int paintOffset; }; -struct multiDef_s +struct MultiDef { const char *dvarList[32]; const char *dvarStr[32]; @@ -214,17 +214,17 @@ struct multiDef_s int strDef; }; -union itemDefData_t +union ItemDefData { listBoxDef_s *listBox; - editFieldDef_s *editField; - multiDef_s *multi; + EditFieldDef *editField; + MultiDef *multi; const char *enumDvarName; void *data; }; struct MenuDef; -struct itemDef_s +struct ItemDef { windowDef_t window; rectDef_s textRect[4]; @@ -258,7 +258,7 @@ struct itemDef_s SoundAliasList *focusSound; float special; int cursorPos[4]; - itemDefData_t typeData; + ItemDefData typeData; int imageTrack; statement_s visibleExp; statement_s textExp; @@ -295,7 +295,7 @@ struct MenuDef float disableColor[4]; statement_s rectXExp; statement_s rectYExp; - itemDef_s **items; + ItemDef **items; }; #endif // MENUDEF_H diff --git a/libs/assets/menulist.cpp b/libs/assets/menulist.cpp new file mode 100644 index 0000000..e1ae87a --- /dev/null +++ b/libs/assets/menulist.cpp @@ -0,0 +1 @@ +#include "menulist.h" diff --git a/libs/assets/model.cpp b/libs/assets/model.cpp new file mode 100644 index 0000000..0e1234c --- /dev/null +++ b/libs/assets/model.cpp @@ -0,0 +1 @@ +#include "model.h" diff --git a/libs/assets/model.h b/libs/assets/model.h index 9a5bd27..e655083 100644 --- a/libs/assets/model.h +++ b/libs/assets/model.h @@ -2,17 +2,19 @@ #define MODEL_H #include "material.h" +#include "scriptstringlist.h" struct XSurfaceVertexInfo { - __int16 vertCount[4]; - unsigned __int16 *vertsBlend; + qint16 vertCount[4]; + qint32 vertsBlendPtr; + quint16 vertsBlend; }; union GfxColor { unsigned int packed; - unsigned __int8 array[4]; + quint8 array[4]; }; union PackedTexCoords @@ -60,20 +62,20 @@ struct D3DVertexBuffer : D3DResource struct XSurfaceCollisionAabb { - unsigned __int16 mins[3]; - unsigned __int16 maxs[3]; + quint16 mins[3]; + quint16 maxs[3]; }; struct XSurfaceCollisionNode { XSurfaceCollisionAabb aabb; - unsigned __int16 childBeginIndex; - unsigned __int16 childCount; + quint16 childBeginIndex; + quint16 childCount; }; struct XSurfaceCollisionLeaf { - unsigned __int16 triangleBeginIndex; + quint16 triangleBeginIndex; }; struct XSurfaceCollisionTree @@ -81,17 +83,17 @@ struct XSurfaceCollisionTree float trans[3]; float scale[3]; unsigned int nodeCount; - XSurfaceCollisionNode *nodes; + QVector nodes; unsigned int leafCount; - XSurfaceCollisionLeaf *leafs; + QVector leafs; }; struct XRigidVertList { - unsigned __int16 boneOffset; - unsigned __int16 vertCount; - unsigned __int16 triOffset; - unsigned __int16 triCount; + quint16 boneOffset; + quint16 vertCount; + quint16 triOffset; + quint16 triCount; XSurfaceCollisionTree *collisionTree; }; @@ -103,11 +105,11 @@ struct D3DIndexBuffer : D3DResource struct XSurface { - unsigned __int8 tileMode; + quint8 tileMode; bool deformed; - unsigned __int16 vertCount; - unsigned __int16 triCount; - unsigned __int16 *triIndices; + quint16 vertCount; + quint16 triCount; + quint16 *triIndices; XSurfaceVertexInfo vertInfo; GfxPackedVertex *verts0; D3DVertexBuffer vb0; @@ -127,12 +129,12 @@ struct DObjAnimMat struct XModelLodInfo { float dist; - unsigned __int16 numsurfs; - unsigned __int16 surfIndex; + quint16 numsurfs; + quint16 surfIndex; int partBits[4]; }; -struct XModelCollSurf_s +struct XModelCollSurf { float mins[3]; float maxs[3]; @@ -161,34 +163,42 @@ struct XModelStreamInfo struct PhysPreset { - const char *name; + qint32 namePtr; + QString name; + int type; + float mass; float bounce; float friction; float bulletForceScale; float explosiveForceScale; - const char *sndAliasPrefix; + + qint32 sndAliasPrefixPtr; + QString sndAliasPrefix; + float piecesSpreadFraction; float piecesUpwardVelocity; + bool tempDefaultToCylinder; }; -struct cplane_s +struct CPlane { float normal[3]; float dist; - unsigned __int8 type; - unsigned __int8 signbits; - unsigned __int8 pad[2]; + quint8 type; + quint8 signbits; + quint8 pad[2]; }; -struct cbrushside_t +struct CBrushSide { - cplane_s *plane; - unsigned int materialNum; - __int16 firstAdjacentSideOffset; - unsigned __int8 edgeCount; + qint32 planePtr; + CPlane plane; + uint materialNum; + qint16 firstAdjacentSideOffset; + quint8 edgeCount; }; struct BrushWrapper @@ -197,13 +207,13 @@ struct BrushWrapper int contents; float maxs[3]; unsigned int numsides; - cbrushside_t *sides; + CBrushSide *sides; __int16 axialMaterialNum[2][3]; - unsigned __int8 *baseAdjacentSide; + quint8 *baseAdjacentSide; __int16 firstAdjacentSideOffsets[2][3]; - unsigned __int8 edgeCount[2][3]; + quint8 edgeCount[2][3]; int totalEdgeCount; - cplane_s *planes; + CPlane *planes; }; struct PhysGeomInfo @@ -231,33 +241,61 @@ struct PhysGeomList struct Model { - const char *name; - unsigned __int8 numBones; - unsigned __int8 numRootBones; - unsigned __int8 numsurfs; - unsigned __int8 lodRampType; - unsigned __int16 *boneNames; - unsigned __int8 *parentList; - __int16 *quats; + QString name; + qint32 namePtr; + quint8 numBones; + quint8 numRootBones; + quint8 numsurfs; + quint8 lodRampType; + + quint32 boneNamesPtr; + ScriptStringList boneNames; + + quint32 parentListPtr; + quint8 *parentList; + + qint32 quatsPtr; + qint16 *quats; + + qint32 transPtr; float *trans; - unsigned __int8 *partClassification; + + qint32 partClassPtr; + quint8 *partClassification; + + qint32 baseMatPtr; DObjAnimMat *baseMat; + + qint32 surfsPtr; XSurface *surfs; + + qint32 matHandlesPtr; Material **materialHandles; + XModelLodInfo lodInfo[4]; - XModelCollSurf_s *collSurfs; + + qint32 collSurfsPtr; + XModelCollSurf *collSurfs; + int numCollSurfs; int contents; + + qint32 boneInfoPtr; XBoneInfo *boneInfo; + float radius; float mins[3]; float maxs[3]; - __int16 numLods; - __int16 collLod; + + qint16 numLods; + qint16 collLod; + XModelStreamInfo streamInfo; int memUsage; - unsigned __int8 flags; - PhysPreset *physPreset; + quint8 flags; + std::shared_ptr physPreset; + + qint32 physGeomsPtr; PhysGeomList *physGeoms; }; diff --git a/libs/assets/rawfile.cpp b/libs/assets/rawfile.cpp new file mode 100644 index 0000000..24cee05 --- /dev/null +++ b/libs/assets/rawfile.cpp @@ -0,0 +1 @@ +#include "rawfile.h" diff --git a/libs/assets/rawfile.h b/libs/assets/rawfile.h index 90c6000..9ee915d 100644 --- a/libs/assets/rawfile.h +++ b/libs/assets/rawfile.h @@ -3,18 +3,15 @@ #include -struct p_RawFile -{ - const char *name; - int length; - const char *buffer; -}; - -struct RawFile : p_RawFile +struct RawFile { + qint32 namePtr; QString name; - QString path; - int length; + + quint32 length; + + qint32 bufferPtr; + QByteArray buffer; }; #endif // RAWFILE_H diff --git a/libs/assets/scriptstringlist.cpp b/libs/assets/scriptstringlist.cpp new file mode 100644 index 0000000..d3a0be3 --- /dev/null +++ b/libs/assets/scriptstringlist.cpp @@ -0,0 +1 @@ +#include "scriptstringlist.h" diff --git a/libs/assets/scriptstringlist.h b/libs/assets/scriptstringlist.h new file mode 100644 index 0000000..a6916f6 --- /dev/null +++ b/libs/assets/scriptstringlist.h @@ -0,0 +1,13 @@ +#ifndef SCRIPTSTRINGLIST_H +#define SCRIPTSTRINGLIST_H + +#include + +struct ScriptStringList +{ + int count; + QVector stringPtrs; + QStringList scriptStrings; +}; + +#endif // SCRIPTSTRINGLIST_H diff --git a/libs/assets/soundalias.cpp b/libs/assets/soundalias.cpp new file mode 100644 index 0000000..8409712 --- /dev/null +++ b/libs/assets/soundalias.cpp @@ -0,0 +1 @@ +#include "soundalias.h" diff --git a/libs/assets/soundcurve.cpp b/libs/assets/soundcurve.cpp new file mode 100644 index 0000000..6d7db5c --- /dev/null +++ b/libs/assets/soundcurve.cpp @@ -0,0 +1 @@ +#include "soundcurve.h" diff --git a/libs/assets/sounddriver.cpp b/libs/assets/sounddriver.cpp new file mode 100644 index 0000000..1366a91 --- /dev/null +++ b/libs/assets/sounddriver.cpp @@ -0,0 +1 @@ +#include "sounddriver.h" diff --git a/libs/assets/sounddriver.h b/libs/assets/sounddriver.h index 353222c..46cb9d0 100644 --- a/libs/assets/sounddriver.h +++ b/libs/assets/sounddriver.h @@ -1,6 +1,8 @@ #ifndef SoundDriver_H #define SoundDriver_H +#include + struct XAUDIOREVERBSETTINGS { unsigned int ReflectionsDelay; @@ -34,8 +36,11 @@ struct XaReverbSettings struct SoundDriver { + qint32 namePtr; + QString name; + + qint32 reverbPtr; XaReverbSettings *reverbSettings; - const char *name; }; #endif // SoundDriver_H diff --git a/libs/assets/stringtable.cpp b/libs/assets/stringtable.cpp new file mode 100644 index 0000000..3e29574 --- /dev/null +++ b/libs/assets/stringtable.cpp @@ -0,0 +1 @@ +#include "stringtable.h" diff --git a/libs/assets/stringtable.h b/libs/assets/stringtable.h index 73328b8..0e1280e 100644 --- a/libs/assets/stringtable.h +++ b/libs/assets/stringtable.h @@ -1,12 +1,19 @@ #ifndef STRINGTABLESH_H #define STRINGTABLESH_H +#include +#include + struct StringTable { - const char *name; + qint32 namePtr; + QString name; + int columnCount; int rowCount; - const char **values; + + qint32 valuesPtr; + QStringList values; }; #endif // STRINGTABLESH_H diff --git a/libs/assets/weapondef.cpp b/libs/assets/weapondef.cpp new file mode 100644 index 0000000..a292c6f --- /dev/null +++ b/libs/assets/weapondef.cpp @@ -0,0 +1 @@ +#include "weapondef.h" diff --git a/libs/assets/weapondef.h b/libs/assets/weapondef.h index cf1d961..59f8067 100644 --- a/libs/assets/weapondef.h +++ b/libs/assets/weapondef.h @@ -5,7 +5,7 @@ #include "soundalias.h" #include "model.h" -enum weapType_t : __int32 +enum WeaponType : __int32 { WEAPTYPE_BULLET = 0x0, WEAPTYPE_GRENADE = 0x1, @@ -14,7 +14,7 @@ enum weapType_t : __int32 WEAPTYPE_NUM = 0x4, }; -enum weapClass_t : __int32 +enum WeaponClass : __int32 { WEAPCLASS_RIFLE = 0x0, WEAPCLASS_MG = 0x1, @@ -52,7 +52,7 @@ enum ImpactType : __int32 IMPACT_TYPE_COUNT = 0x9, }; -enum weapInventoryType_t : __int32 +enum WeaponInventoryType : __int32 { WEAPINVENTORY_PRIMARY = 0x0, WEAPINVENTORY_OFFHAND = 0x1, @@ -61,7 +61,7 @@ enum weapInventoryType_t : __int32 WEAPINVENTORYCOUNT = 0x4, }; -enum weapFireType_t : __int32 +enum WeaponFireType : __int32 { WEAPON_FIRETYPE_FULLAUTO = 0x0, WEAPON_FIRETYPE_SINGLESHOT = 0x1, @@ -80,7 +80,7 @@ enum OffhandClass : __int32 OFFHAND_CLASS_COUNT = 0x4, }; -enum weapStance_t : __int32 +enum WeaponStance : __int32 { WEAPSTANCE_STAND = 0x0, WEAPSTANCE_DUCK = 0x1, @@ -88,7 +88,7 @@ enum weapStance_t : __int32 WEAPSTANCE_NUM = 0x3, }; -enum activeReticleType_t : __int32 +enum ActiveReticleType : __int32 { VEH_ACTIVE_RETICLE_NONE = 0x0, VEH_ACTIVE_RETICLE_PIP_ON_A_STICK = 0x1, @@ -96,7 +96,7 @@ enum activeReticleType_t : __int32 VEH_ACTIVE_RETICLE_COUNT = 0x3, }; -enum weaponIconRatioType_t : __int32 +enum WeaponIconRatioType : __int32 { WEAPON_ICON_RATIO_1TO1 = 0x0, WEAPON_ICON_RATIO_2TO1 = 0x1, @@ -104,7 +104,7 @@ enum weaponIconRatioType_t : __int32 WEAPON_ICON_RATIO_COUNT = 0x3, }; -enum ammoCounterClipType_t : __int32 +enum AmmoCounterClipType : __int32 { AMMO_COUNTER_CLIP_NONE = 0x0, AMMO_COUNTER_CLIP_MAGAZINE = 0x1, @@ -116,7 +116,7 @@ enum ammoCounterClipType_t : __int32 AMMO_COUNTER_CLIP_COUNT = 0x7, }; -enum weapOverlayReticle_t : __int32 +enum WeaponOverlayReticle : __int32 { WEAPOVERLAYRETICLE_NONE = 0x0, WEAPOVERLAYRETICLE_CROSSHAIR = 0x1, @@ -131,7 +131,7 @@ enum WeapOverlayInteface_t : __int32 WEAPOVERLAYINTERFACECOUNT = 0x3, }; -enum weapProjExposion_t : __int32 +enum WeaponProjExposion : __int32 { WEAPPROJEXP_GRENADE = 0x0, WEAPPROJEXP_ROCKET = 0x1, @@ -152,7 +152,7 @@ enum WeapStickinessType : __int32 WEAPSTICKINESS_COUNT = 0x4, }; -enum guidedMissileType_t : __int32 +enum GuidedMissileType : __int32 { MISSILE_GUIDANCE_NONE = 0x0, MISSILE_GUIDANCE_SIDEWINDER = 0x1, @@ -174,14 +174,14 @@ struct WeaponDef unsigned __int16 notetrackSoundMapKeys[16]; unsigned __int16 notetrackSoundMapValues[16]; int playerAnimType; - weapType_t weapType; - weapClass_t weapClass; + WeaponType weapType; + WeaponClass weapClass; PenetrateType penetrateType; ImpactType impactType; - weapInventoryType_t inventoryType; - weapFireType_t fireType; + WeaponInventoryType inventoryType; + WeaponFireType fireType; OffhandClass offhandClass; - weapStance_t stance; + WeaponStance stance; const EffectDef *viewFlashEffect; const EffectDef *worldFlashEffect; SoundAliasList *pickupSound; @@ -239,7 +239,7 @@ struct WeaponDef int iReticleCenterSize; int iReticleSideSize; int iReticleMinOfs; - activeReticleType_t activeReticleType; + ActiveReticleType activeReticleType; float vStandMove[3]; float vStandRot[3]; float vDuckedOfs[3]; @@ -264,10 +264,10 @@ struct WeaponDef Model *knifeModel; Model *worldKnifeModel; Material *hudIcon; - weaponIconRatioType_t hudIconRatio; + WeaponIconRatioType hudIconRatio; Material *ammoCounterIcon; - weaponIconRatioType_t ammoCounterIconRatio; - ammoCounterClipType_t ammoCounterClip; + WeaponIconRatioType ammoCounterIconRatio; + AmmoCounterClipType ammoCounterClip; int iStartAmmo; const char *szAmmoName; int iAmmoIndex; @@ -338,7 +338,7 @@ struct WeaponDef float fAdsZoomOutFrac; Material *overlayMaterial; Material *overlayMaterialLowRes; - weapOverlayReticle_t overlayReticle; + WeaponOverlayReticle overlayReticle; WeapOverlayInteface_t overlayInterface; float overlayWidth; float overlayHeight; @@ -395,10 +395,10 @@ struct WeaponDef int enhanced; int laserSightDuringNightvision; Material *killIcon; - weaponIconRatioType_t killIconRatio; + WeaponIconRatioType killIconRatio; int flipKillIcon; Material *dpadIcon; - weaponIconRatioType_t dpadIconRatio; + WeaponIconRatioType dpadIconRatio; int bNoPartialReload; int bSegmentedReload; int iReloadAmmoAdd; @@ -422,7 +422,7 @@ struct WeaponDef float timeToAccelerate; float projectileCurvature; Model *projectileModel; - weapProjExposion_t projExplosion; + WeaponProjExposion projExplosion; const EffectDef *projExplosionEffect; int projExplosionEffectForceNormalUp; const EffectDef *projDudEffect; @@ -440,7 +440,7 @@ struct WeaponDef float perpendicularBounce[29]; const EffectDef *projTrailEffect; float vProjectileColor[3]; - guidedMissileType_t guidedMissileType; + GuidedMissileType guidedMissileType; float maxSteeringAccel; int projIgnitionDelay; const EffectDef *projIgnitionEffect;