From 7c613afa6151683fb1544e0200cbaae98189b6ef Mon Sep 17 00:00:00 2001 From: NicknineTheEagle Date: Wed, 27 Jul 2022 11:48:36 +0300 Subject: [PATCH 1/7] Changed UE3 PS3 sound extension to .msf --- Exporters/ExportSound.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Exporters/ExportSound.cpp b/Exporters/ExportSound.cpp index 04287636..77722116 100644 --- a/Exporters/ExportSound.cpp +++ b/Exporters/ExportSound.cpp @@ -28,7 +28,7 @@ static void SaveSound(const UObject *Obj, void *Data, int DataSize, const char * else if (!memcmp(Data, "FSB4", 4)) ext = "fsb"; // FMOD sound bank else if (!memcmp(Data, "MSFC", 4)) - ext = "mp3"; // PS3 MP3 codec + ext = "msf"; // PS3 MP3 codec FArchive *Ar = CreateExportArchive(Obj, EFileArchiveOptions::Default, "%s.%s", Obj->Name, ext); if (Ar) From 67dba9557802a0a5e3b2bde2676c0c9d61fbea98 Mon Sep 17 00:00:00 2001 From: NicknineTheEagle Date: Wed, 27 Jul 2022 11:49:35 +0300 Subject: [PATCH 2/7] Use FileType var for extension when exporting USound --- Exporters/ExportSound.cpp | 2 +- Unreal/UnSound.h | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Exporters/ExportSound.cpp b/Exporters/ExportSound.cpp index 77722116..b0c4b922 100644 --- a/Exporters/ExportSound.cpp +++ b/Exporters/ExportSound.cpp @@ -203,7 +203,7 @@ static bool SaveXMASound(const UObject *Obj, void *Data, int DataSize, const cha void ExportSound(const USound *Snd) { - SaveSound(Snd, (void*)&Snd->RawData[0], Snd->RawData.Num(), "unk"); + SaveSound(Snd, (void*)&Snd->RawData[0], Snd->RawData.Num(), Snd->FileType); } diff --git a/Unreal/UnSound.h b/Unreal/UnSound.h index 4d7f76bf..55efc0bb 100644 --- a/Unreal/UnSound.h +++ b/Unreal/UnSound.h @@ -7,8 +7,8 @@ class USound : public UObject { DECLARE_CLASS(USound, UObject); public: + FName FileType; float f2C; - FName f5C; TLazyArray RawData; void Serialize(FArchive &Ar) @@ -16,7 +16,7 @@ class USound : public UObject guard(USound::Serialize); Super::Serialize(Ar); - Ar << f5C; + Ar << FileType; #if UT2 || BATTLE_TERR || LOCO if ((Ar.Game == GAME_UT2 || Ar.Game == GAME_BattleTerr || Ar.Game == GAME_Loco) && Ar.ArLicenseeVer >= 2) Ar << f2C; From 4727493cf5e420d6a509bdb521370a3665d76af7 Mon Sep 17 00:00:00 2001 From: NicknineTheEagle Date: Wed, 27 Jul 2022 11:50:27 +0300 Subject: [PATCH 3/7] Hack to fix USound parsing in some games --- Unreal/UnSound.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Unreal/UnSound.h b/Unreal/UnSound.h index 55efc0bb..50a5a3a2 100644 --- a/Unreal/UnSound.h +++ b/Unreal/UnSound.h @@ -23,6 +23,13 @@ class USound : public UObject #endif Ar << RawData; + // some hack to support more games ... + if (Ar.Tell() < Ar.GetStopper()) + { + appPrintf("USound %s: dropping %d bytes\n", Name, Ar.GetStopper() - Ar.Tell()); + DROP_REMAINING_DATA(Ar); + } + unguard; } }; From 452e43671649061877d053869e52c6b2bb3f4f16 Mon Sep 17 00:00:00 2001 From: NicknineTheEagle Date: Wed, 27 Jul 2022 11:50:43 +0300 Subject: [PATCH 4/7] Added .umx package extension --- Unreal/FileSystem/GameFileSystem.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Unreal/FileSystem/GameFileSystem.cpp b/Unreal/FileSystem/GameFileSystem.cpp index f77fbead..c669727f 100644 --- a/Unreal/FileSystem/GameFileSystem.cpp +++ b/Unreal/FileSystem/GameFileSystem.cpp @@ -30,7 +30,7 @@ char GRootDirectory[MAX_PACKAGE_PATH]; static const char *PackageExtensions[] = { - "u", "ut2", "utx", "uax", "usx", "ukx", + "u", "ut2", "utx", "uax", "umx", "usx", "ukx", #if UNREAL3 "upk", "ut3", "xxx", "umap", "udk", "map", #endif From 60a640bcbfba15053901836afa8f3d4f1841e879 Mon Sep 17 00:00:00 2001 From: NicknineTheEagle Date: Wed, 27 Jul 2022 11:51:06 +0300 Subject: [PATCH 5/7] Added UMusic class as an alias for USound --- Unreal/UnSound.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Unreal/UnSound.h b/Unreal/UnSound.h index 50a5a3a2..c26fb66e 100644 --- a/Unreal/UnSound.h +++ b/Unreal/UnSound.h @@ -252,7 +252,8 @@ class USoundWave : public UObject // actual parent is USoundBase #define REGISTER_SOUND_CLASSES \ - REGISTER_CLASS(USound) + REGISTER_CLASS(USound) \ + REGISTER_CLASS_ALIAS(USound, UMusic) #define REGISTER_SOUND_CLASSES_UE3 \ REGISTER_CLASS(USoundNodeWave) From a9831d33a73f7b01dcf1d48c33f66dc04846f091 Mon Sep 17 00:00:00 2001 From: NicknineTheEagle Date: Wed, 27 Jul 2022 12:43:29 +0300 Subject: [PATCH 6/7] Added support for USound in Harry Potter and the Chamber of Secrets --- Unreal/GameDatabase.cpp | 3 +++ Unreal/GameDefines.h | 1 + Unreal/UnCore.h | 1 + Unreal/UnSound.h | 27 +++++++++++++++++++++++++++ 4 files changed, 32 insertions(+) diff --git a/Unreal/GameDatabase.cpp b/Unreal/GameDatabase.cpp index 4dbdeca1..8839711c 100644 --- a/Unreal/GameDatabase.cpp +++ b/Unreal/GameDatabase.cpp @@ -30,6 +30,9 @@ const GameInfo GListOfGames[] = { #if UNDYING G("Undying", undying, GAME_Undying), #endif + #if HP2 + G("Harry Potter and the Chamber of Secrets", hp2, GAME_HP2), + #endif #endif // UNREAL1 // Unreal Engine 2 diff --git a/Unreal/GameDefines.h b/Unreal/GameDefines.h index 3c5fe091..ad2110a4 100644 --- a/Unreal/GameDefines.h +++ b/Unreal/GameDefines.h @@ -33,6 +33,7 @@ #define DEUS_EX 1 #define RUNE 1 #define UNDYING 1 +#define HP2 1 #endif // requires UNREAL25 diff --git a/Unreal/UnCore.h b/Unreal/UnCore.h index f5b3c7f8..aca3924d 100644 --- a/Unreal/UnCore.h +++ b/Unreal/UnCore.h @@ -347,6 +347,7 @@ enum EGame GAME_UE1 = 0x0100000, GAME_Undying, + GAME_HP2, GAME_UE2 = 0x0200000, GAME_UT2, diff --git a/Unreal/UnSound.h b/Unreal/UnSound.h index c26fb66e..2953472a 100644 --- a/Unreal/UnSound.h +++ b/Unreal/UnSound.h @@ -21,6 +21,33 @@ class USound : public UObject if ((Ar.Game == GAME_UT2 || Ar.Game == GAME_BattleTerr || Ar.Game == GAME_Loco) && Ar.ArLicenseeVer >= 2) Ar << f2C; #endif +#if HP2 + if (Ar.Game == GAME_HP2) + { + int CoreFlags; + float Duration; + int raw_NumSamples, raw_BitsPerSample, raw_NumChannels, raw_SampleRate; + + Ar << CoreFlags; + Ar << Duration; + + // These are used for raw EA-XA + Ar << raw_NumSamples << raw_BitsPerSample << raw_NumChannels << raw_SampleRate; + + appPrintf("USound %s: raw_NumSamples=%d, raw_BitsPerSample=%d, raw_NumChannels=%d, raw_SampleRate=%d\n", + Name, raw_NumSamples, raw_BitsPerSample, raw_NumChannels, raw_SampleRate); + + Ar << RawData; + + if (CoreFlags & 128) + { + TLazyArray LipSyncData; + Ar << LipSyncData; + } + return; + } +#endif + Ar << RawData; // some hack to support more games ... From 155bb27459288c51cc49ae1be683ce77df744779 Mon Sep 17 00:00:00 2001 From: NicknineTheEagle Date: Wed, 27 Jul 2022 13:11:13 +0300 Subject: [PATCH 7/7] Added user option to toggle converting UE3 XMA to RIFF --- Exporters/ExportSound.cpp | 11 +++-------- Exporters/Exporters.h | 1 + UmodelTool/SettingsDialog.cpp | 4 ++++ UmodelTool/UmodelSettings.cpp | 2 ++ UmodelTool/UmodelSettings.h | 2 ++ 5 files changed, 12 insertions(+), 8 deletions(-) diff --git a/Exporters/ExportSound.cpp b/Exporters/ExportSound.cpp index b0c4b922..19cf61b6 100644 --- a/Exporters/ExportSound.cpp +++ b/Exporters/ExportSound.cpp @@ -7,7 +7,7 @@ #include "Exporters.h" -#define XMA_EXPORT 1 +bool GXmaExport = true; static void SaveSound(const UObject *Obj, void *Data, int DataSize, const char *DefExt) @@ -39,8 +39,6 @@ static void SaveSound(const UObject *Obj, void *Data, int DataSize, const char * } -#if XMA_EXPORT - static void WriteRiffHeader(FArchive &Ar, int FileLength) { assert(!Ar.IsLoading); @@ -198,8 +196,6 @@ static bool SaveXMASound(const UObject *Obj, void *Data, int DataSize, const cha return true; } -#endif // XMA_EXPORT - void ExportSound(const USound *Snd) { @@ -228,10 +224,9 @@ void ExportSoundNodeWave(const USoundNodeWave *Snd) { bulk = &Snd->CompressedXbox360Data; ext = "x360audio"; -#if XMA_EXPORT - if (SaveXMASound(Snd, bulk->BulkData, bulk->ElementCount, "xma")) return; + + if (GXmaExport && SaveXMASound(Snd, bulk->BulkData, bulk->ElementCount, "xma")) return; // else - detect format by data tags, like for PC -#endif } else if (Snd->CompressedPS3Data.ElementCount) { diff --git a/Exporters/Exporters.h b/Exporters/Exporters.h index 2272240c..8fbf4e60 100644 --- a/Exporters/Exporters.h +++ b/Exporters/Exporters.h @@ -46,6 +46,7 @@ extern bool GUncook; extern bool GUseGroups; extern bool GDontOverwriteFiles; extern bool GDummyExport; +extern bool GXmaExport; // forwards class UObject; diff --git a/UmodelTool/SettingsDialog.cpp b/UmodelTool/SettingsDialog.cpp index fb1acf6e..e21f60b8 100644 --- a/UmodelTool/SettingsDialog.cpp +++ b/UmodelTool/SettingsDialog.cpp @@ -161,6 +161,10 @@ UIElement& UISettingsDialog::MakeExportOptions() ] + NewControl(UICheckbox, "Export compressed textures to dds format", &Opt.Export.ExportDdsTexture) ] + + NewControl(UIGroup, "Sound Export") + [ + NewControl(UICheckbox, "Export UE3 XMA as RIFF", &Opt.Export.ExportRiffXma) + ] + NewControl(UICheckbox, "Don't overwrite already exported files", &Opt.Export.DontOverwriteFiles) ; } diff --git a/UmodelTool/UmodelSettings.cpp b/UmodelTool/UmodelSettings.cpp index 0d0b8080..39aa1ebe 100644 --- a/UmodelTool/UmodelSettings.cpp +++ b/UmodelTool/UmodelSettings.cpp @@ -131,6 +131,7 @@ void CExportSettings::Reset() SaveUncooked = false; SaveGroups = false; DontOverwriteFiles = false; + ExportRiffXma = true; } void CExportSettings::Apply() @@ -149,6 +150,7 @@ void CExportSettings::Apply() GUncook = SaveUncooked; GUseGroups = SaveGroups; GDontOverwriteFiles = DontOverwriteFiles; + GXmaExport = ExportRiffXma; } void CSavePackagesSettings::SetPath(const char* path) diff --git a/UmodelTool/UmodelSettings.h b/UmodelTool/UmodelSettings.h index 6af56647..072506ec 100644 --- a/UmodelTool/UmodelSettings.h +++ b/UmodelTool/UmodelSettings.h @@ -80,6 +80,7 @@ struct CExportSettings bool SaveUncooked; bool SaveGroups; bool DontOverwriteFiles; + bool ExportRiffXma; BEGIN_PROP_TABLE PROP_STRING(ExportPath) @@ -91,6 +92,7 @@ struct CExportSettings PROP_BOOL(SaveUncooked) PROP_BOOL(SaveGroups) PROP_BOOL(DontOverwriteFiles) + PROP_BOOL(ExportRiffXma) END_PROP_TABLE CExportSettings()