diff --git a/Unreal/GameDatabase.cpp b/Unreal/GameDatabase.cpp index 4dbdeca1..160baab8 100644 --- a/Unreal/GameDatabase.cpp +++ b/Unreal/GameDatabase.cpp @@ -416,6 +416,9 @@ const GameInfo GListOfGames[] = { # if SEAOFTHIEVES G("Sea of Thieves", sot, GAME_SeaOfThieves), # endif +# if VALORANT + G("VALORANT", valorant, GAME_Valorant), +# endif #endif // UNREAL4 // end marker diff --git a/Unreal/GameDefines.h b/Unreal/GameDefines.h index 3c5fe091..359057fc 100644 --- a/Unreal/GameDefines.h +++ b/Unreal/GameDefines.h @@ -167,6 +167,7 @@ #define KH3 1 // Kingdom Hearts 3 #define JEDI 1 // Star Wars Jedi: Fallen Order #define SEAOFTHIEVES 1 // Sea of Thieves +#define VALORANT 1 // VALORANT #define SPECIAL_TAGS 1 // games with different PACKAGE_FILE_TAG diff --git a/Unreal/UnCore.h b/Unreal/UnCore.h index 22f46781..69ac2f41 100644 --- a/Unreal/UnCore.h +++ b/Unreal/UnCore.h @@ -499,6 +499,8 @@ enum EGame GAME_UE4_25_Plus = GAME_UE4(25)+1, // 4.26 GAME_Dauntless = GAME_UE4(26)+1, + // 4.27 + GAME_Valorant = GAME_UE4(27)+1, GAME_ENGINE = 0xFFF0000 // mask for game engine }; diff --git a/Unreal/UnrealMesh/UnMesh4.cpp b/Unreal/UnrealMesh/UnMesh4.cpp index 89e2119a..c44db4b1 100644 --- a/Unreal/UnrealMesh/UnMesh4.cpp +++ b/Unreal/UnrealMesh/UnMesh4.cpp @@ -128,6 +128,26 @@ struct FPositionVertexBuffer4 } #endif // DAYSGONE +#if VALORANT + if (Ar.Game == GAME_Valorant) + { + int bUseFullPrecisionPositions; + FBoxSphereBounds Bounds; + Ar << bUseFullPrecisionPositions << Bounds; + if (!bUseFullPrecisionPositions) + { + TArray PackedVerts; + PackedVerts.BulkSerialize(Ar); + S.Verts.AddUninitialized(PackedVerts.Num()); + for (int i = 0; i < PackedVerts.Num(); i++) + { + S.Verts[i] = PackedVerts[i]; + } + return Ar; + } + } +#endif // VALORANT + S.Verts.BulkSerialize(Ar); return Ar; diff --git a/Unreal/UnrealMesh/UnMeshTypes.h b/Unreal/UnrealMesh/UnMeshTypes.h index 1e1584fa..f0df21ce 100644 --- a/Unreal/UnrealMesh/UnMeshTypes.h +++ b/Unreal/UnrealMesh/UnMeshTypes.h @@ -405,6 +405,27 @@ struct FVectorHalf SIMPLE_TYPE(FVectorHalf, uint16); +struct FVector4Half +{ + uint16 X, Y, Z, W; + + friend FArchive& operator<<(FArchive &Ar, FVector4Half &v) + { + return Ar << v.X << v.Y << v.Z << v.W; + } + operator FVector() const + { + FVector r; + r.X = half2float(X); + r.Y = half2float(Y); + r.Z = half2float(Z); + return r; + } +}; + +SIMPLE_TYPE(FVector4Half, uint16); + + #if BATMAN // This is a variant of FQuatFixed48NoW developed for Batman: Arkham Asylum. It's destination diff --git a/Unreal/UnrealPackage/UnPackage4.cpp b/Unreal/UnrealPackage/UnPackage4.cpp index 340d0448..fd6ac237 100644 --- a/Unreal/UnrealPackage/UnPackage4.cpp +++ b/Unreal/UnrealPackage/UnPackage4.cpp @@ -194,6 +194,10 @@ void FPackageFileSummary::Serialize4(FArchive &Ar) int32 ThumbnailTableOffset; Ar << ThumbnailTableOffset; +#if VALORANT + if (Ar.Game == GAME_Valorant) Ar.Seek(Ar.Tell()+8); // no idea what these bytes are used for +#endif // VALORANT + // guid Ar << Guid;