Skip to content

Commit 2f3d768

Browse files
committed
More logging, try loading all mips for Smite
1 parent fc617e5 commit 2f3d768

File tree

4 files changed

+27
-16
lines changed

4 files changed

+27
-16
lines changed

Unreal/FileSystem/GameFileSystem.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -820,8 +820,13 @@ void appSetRootDirectory(const char *dir, bool recurse)
820820
#if SMITE
821821
if(GForceGame == GAME_Smite) {
822822
const CGameFileInfo* manifest = CGameFileInfo::Find("MergedFileIndexCache.bin");
823+
const CGameFileInfo* modernCheck = CGameFileInfo::Find("assembly.dat");
823824
if (manifest)
824825
{
826+
if(!modernCheck) {
827+
appNotify("Smite: old manifest format, might crash.");
828+
}
829+
825830
LoadSmiteManifest(manifest);
826831
}
827832
else

Unreal/FileSystem/GameFileSystemSmite.cpp

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
#include "UnCore.h"
33
#include "GameFileSystem.h"
44
#include "GameFileSystemSmite.h"
5+
#include <md5/md5.h>
56

67
#if SMITE
78
static FSmiteManifest* GSmiteManifest = NULL;
@@ -21,18 +22,23 @@ void LoadSmiteManifest(const CGameFileInfo* info) {
2122
GSmiteManifest->Serialize(*loader);
2223
delete loader;
2324

24-
unguard
25+
unguard;
2526
}
2627

2728

28-
FArchive* GetSmiteBlob(const FGuid& guid, int level, const char* ext) {
29+
FArchive* GetSmiteBlob(const char* name, int name_len, int level, const char* ext) {
2930
guard(GetSmiteBlob);
3031

3132
if(GSmiteManifest == nullptr) {
3233
return nullptr;
3334
}
3435

35-
TArray<FSmiteFile>* item = GSmiteManifest->Files.Find(guid);
36+
MD5Context ctx;
37+
md5Init(&ctx);
38+
md5Update(&ctx, (unsigned char*)name, name_len);
39+
md5Finalize(&ctx);
40+
41+
TArray<FSmiteFile>* item = GSmiteManifest->Files.Find(*reinterpret_cast<FGuid*>(ctx.digest));
3642
if(item == nullptr) {
3743
return nullptr;
3844
}
@@ -46,6 +52,7 @@ FArchive* GetSmiteBlob(const FGuid& guid, int level, const char* ext) {
4652
appSprintf(ARRAY_ARG(filename), "%s.%s", bulk->GetDataArray().GetData(), ext);
4753
const CGameFileInfo* info = CGameFileInfo::Find(filename);
4854
if(info == nullptr) {
55+
appNotify("Smite: can't find tfc %s for %s", filename, name);
4956
return nullptr;
5057
}
5158

@@ -60,7 +67,7 @@ FArchive* GetSmiteBlob(const FGuid& guid, int level, const char* ext) {
6067
return Ar;
6168
}
6269
}
63-
unguard
70+
unguard;
6471

6572
return nullptr;
6673
}

Unreal/FileSystem/GameFileSystemSmite.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,6 @@ struct FSmiteManifest
2929

3030
void LoadSmiteManifest(const CGameFileInfo* info);
3131

32-
FArchive* GetSmiteBlob(const FGuid& guid, int level, const char* ext);
32+
FArchive* GetSmiteBlob(const char* name, int name_len, int level, const char* ext);
3333

3434
#endif // SMITE

Unreal/UnrealMaterial/UnTexture3.cpp

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -644,13 +644,13 @@ static int GetRealTextureOffset_MH(const UTexture2D *Obj, int MipIndex)
644644
#endif // MARVEL_HEROES
645645

646646
#if SMITE
647-
#include <md5/md5.h>
648647
#include "../FileSystem/GameFileSystemSmite.h"
649648
#include "../UnrealPackage/UnPackageUE3Reader.h"
650649

651650
static bool LoadBulkTextureSMITE(const UTexture2D* texture, const TArray<FTexture2DMipMap> &MipsArray, int MipIndex, bool verbose) {
652651
static char buf[2048];
653-
texture->GetFullName(ARRAY_ARG(buf), true, true, true); char *s = buf;
652+
texture->GetFullName(ARRAY_ARG(buf), true, true, true);
653+
char *s = buf;
654654
int len = 0;
655655
if(verbose) {
656656
appPrintf("Smite: Finding %s (Mip %d) in MergedFileIndexCache\n", buf, MipIndex);
@@ -660,13 +660,9 @@ static bool LoadBulkTextureSMITE(const UTexture2D* texture, const TArray<FTextur
660660
len++;
661661
s++;
662662
}
663-
MD5Context ctx;
664-
md5Init(&ctx);
665-
md5Update(&ctx, (unsigned char*)buf, len);
666-
md5Finalize(&ctx);
667663

668664
const FTexture2DMipMap &Mip = MipsArray[MipIndex];
669-
FArchive* Ar = GetSmiteBlob(*reinterpret_cast<FGuid*>(ctx.digest), MipIndex, "tfc");
665+
FArchive* Ar = GetSmiteBlob(buf, len, MipIndex, "tfc");
670666
if(Ar == NULL) {
671667
appPrintf("Smite: unable to find %s (Mip %d) in MergedFileIndexCache\n", buf, MipIndex);
672668
return false;
@@ -727,10 +723,8 @@ bool UTexture2D::LoadBulkTexture(const TArray<FTexture2DMipMap> &MipsArray, int
727723
if (TextureFileCacheName != "None")
728724
{
729725
#if SMITE
730-
if(GForceGame == GAME_Smite) {
731-
if(LoadBulkTextureSMITE(this, MipsArray, MipIndex, verbose)) {
732-
return true;
733-
}
726+
if(Package && Package->Game == GAME_Smite) {
727+
return LoadBulkTextureSMITE(this, MipsArray, MipIndex, verbose);
734728
}
735729
#endif
736730
// TFC file is assigned
@@ -1091,6 +1085,11 @@ bool UTexture2D::GetTextureData(CTextureData &TexData) const
10911085
//?? Separate this function ?
10921086
//!! * -notfc cmdline switch
10931087
//!! * material viewer: support switching mip levels (for xbox decompression testing)
1088+
#if SMITE
1089+
if(Package && Package->Game == GAME_Smite) {
1090+
bulkFailed = false;
1091+
} else
1092+
#endif
10941093
if (Bulk.BulkDataFlags & BULKDATA_Unused) continue; // mip level is stripped
10951094
if (!(Bulk.BulkDataFlags & BULKDATA_StoreInSeparateFile)) continue; // equals to BULKDATA_PayloadAtEndOfFile for UE4
10961095
// some optimization in a case of missing bulk file

0 commit comments

Comments
 (0)