Skip to content

Commit

Permalink
Merge pull request #121 from psiberx/master
Browse files Browse the repository at this point in the history
Added base package reader and converted GlobalNodeRef
  • Loading branch information
wopss authored May 9, 2024
2 parents c589f8a + d68ad0d commit ee81545
Show file tree
Hide file tree
Showing 11 changed files with 74 additions and 84 deletions.
4 changes: 4 additions & 0 deletions include/RED4ext/Detail/AddressHashes.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,10 @@ constexpr std::uint32_t ObjectPackageReader_OnReadHeader = 1632836642;
constexpr std::uint32_t ObjectPackageReader_ReadHeader = 1285757088;
#pragma endregion

#pragma region BasePackageReader
constexpr std::uint32_t BasePackageReader_ReadHeader = 3410956665;
#pragma endregion

#pragma region ResourceDepot
constexpr std::uint32_t ResourceDepot = 0x659A0FC7;
#pragma endregion
Expand Down
3 changes: 2 additions & 1 deletion include/RED4ext/Dump/Reflection-inl.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -307,7 +307,8 @@ RED4EXT_INLINE void Dump(std::filesystem::path aOutPath, std::filesystem::path a
{"CBaseEngine", "GameEngine"},
{"BaseGameEngine", "GameEngine"},
{"CGameEngine", "GameEngine"},
{"UpdateBucketEnum", "SystemUpdate"}};
{"UpdateBucketEnum", "SystemUpdate"},
{"worldGlobalNodeRef", "NativeTypes"}};

std::regex invalidChars(INVALID_CHARACTERS);
std::regex invalidKeywords(INVALID_KEYWORDS);
Expand Down
12 changes: 12 additions & 0 deletions include/RED4ext/NodeRef.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,18 @@ struct NodeRef
};
RED4EXT_ASSERT_SIZE(NodeRef, 0x8);

namespace world
{
struct GlobalNodeRef : NodeRef
{
using NodeRef::NodeRef;
};
RED4EXT_ASSERT_SIZE(GlobalNodeRef, 0x8);
} // namespace world

using GlobalNodeRef = world::GlobalNodeRef;
using worldGlobalNodeRef = world::GlobalNodeRef;

template<typename T>
struct HashMapHash<T, std::enable_if_t<std::is_same_v<T, NodeRef>>>
{
Expand Down
65 changes: 27 additions & 38 deletions include/RED4ext/Package-inl.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,58 +5,52 @@
#include <RED4ext/Detail/AddressHashes.hpp>
#include <RED4ext/Relocation.hpp>

RED4EXT_INLINE RED4ext::ObjectPackageHeader::ObjectPackageHeader()
: rootIndex(-1)

RED4EXT_INLINE RED4ext::PackageReader::PackageReader(void* aBuffer, uint32_t aSize)
: buffer(aBuffer)
, size(aSize)
{
}

RED4EXT_INLINE bool RED4ext::ObjectPackageHeader::IsEmpty() const
RED4EXT_INLINE RED4ext::PackageReader::PackageReader(const DeferredDataBuffer& aBuffer)
: buffer(aBuffer.raw->data)
, size(aBuffer.raw->size)
{
return cruids.IsEmpty();
}

RED4EXT_INLINE RED4ext::ObjectPackageReader::ObjectPackageReader(void* aBuffer, uint32_t aSize)
RED4EXT_INLINE RED4ext::PackageReader::PackageReader(const DataBuffer& aBuffer)
: buffer(aBuffer.buffer.data)
, size(aBuffer.buffer.size)
{
using func_t = void (*)(ObjectPackageReader*);
static UniversalRelocFunc<func_t> func(Detail::AddressHashes::ObjectPackageReader_ctor);

func(this);

buffer = aBuffer;
size = aSize;
}

RED4EXT_INLINE RED4ext::ObjectPackageReader::ObjectPackageReader(const DeferredDataBuffer& aBuffer)
RED4EXT_INLINE RED4ext::PackageReader::PackageReader(const RawBuffer& aBuffer)
: buffer(aBuffer.data)
, size(aBuffer.size)
{
using func_t = void (*)(ObjectPackageReader*);
static UniversalRelocFunc<func_t> func(Detail::AddressHashes::ObjectPackageReader_ctor);

func(this);

buffer = aBuffer.raw->data;
size = aBuffer.raw->size;
}

RED4EXT_INLINE RED4ext::ObjectPackageReader::ObjectPackageReader(const DataBuffer& aBuffer)
RED4EXT_INLINE bool RED4ext::PackageReader::IsEmpty() const
{
using func_t = void (*)(ObjectPackageReader*);
static UniversalRelocFunc<func_t> func(Detail::AddressHashes::ObjectPackageReader_ctor);
return !buffer;
}

func(this);
RED4EXT_INLINE void RED4ext::PackageReader::ReadHeader(RED4ext::PackageHeader& aOut)
{
using func_t = void (*)(PackageReader*, PackageHeader&);
static UniversalRelocFunc<func_t> func(Detail::AddressHashes::BasePackageReader_ReadHeader);

buffer = aBuffer.buffer.data;
size = aBuffer.buffer.size;
func(this, aOut);
}

RED4EXT_INLINE RED4ext::ObjectPackageReader::ObjectPackageReader(const RawBuffer& aBuffer)
RED4EXT_INLINE RED4ext::ObjectPackageHeader::ObjectPackageHeader()
: rootIndex(-1)
{
using func_t = void (*)(ObjectPackageReader*);
static UniversalRelocFunc<func_t> func(Detail::AddressHashes::ObjectPackageReader_ctor);

func(this);
}

buffer = aBuffer.data;
size = aBuffer.size;
RED4EXT_INLINE bool RED4ext::ObjectPackageHeader::IsEmpty() const
{
return cruids.IsEmpty();
}

RED4EXT_INLINE void RED4ext::ObjectPackageReader::OnReadHeader(uint64_t a1, uint64_t a2)
Expand All @@ -83,11 +77,6 @@ RED4EXT_INLINE void RED4ext::ObjectPackageReader::ReadHeader(RED4ext::ObjectPack
func(this, aOut);
}

RED4EXT_INLINE bool RED4ext::ObjectPackageReader::IsEmpty() const
{
return !buffer;
}

RED4EXT_INLINE RED4ext::ObjectPackageExtractorParams::ObjectPackageExtractorParams(const RED4ext::PackageHeader& aHeader)
: header(aHeader)
, loader(ResourceLoader::Get())
Expand Down
38 changes: 25 additions & 13 deletions include/RED4ext/Package.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,27 @@ RED4EXT_ASSERT_OFFSET(PackageHeader, unk02, 0x02);
RED4EXT_ASSERT_OFFSET(PackageHeader, root, 0x08);
RED4EXT_ASSERT_OFFSET(PackageHeader, buffer, 0x48);

struct PackageReader
{
PackageReader(void* aBuffer, uint32_t aSize);
PackageReader(const DeferredDataBuffer& aBuffer);
PackageReader(const DataBuffer& aBuffer);
PackageReader(const RawBuffer& aBuffer);

virtual ~PackageReader() = default; // 00
virtual void OnReadHeader(uint64_t a1, uint64_t a2) = 0; // 08

void ReadHeader(PackageHeader& aOut);

[[nodiscard]] bool IsEmpty() const;

void* buffer; // 08
uint32_t size; // 10
};
RED4EXT_ASSERT_SIZE(PackageReader, 0x18);
RED4EXT_ASSERT_OFFSET(PackageReader, buffer, 0x08);
RED4EXT_ASSERT_OFFSET(PackageReader, size, 0x10);

struct ObjectPackageHeader
{
ObjectPackageHeader();
Expand All @@ -63,28 +84,19 @@ RED4EXT_ASSERT_OFFSET(ObjectPackageHeader, rootIndex, 0x0);
RED4EXT_ASSERT_OFFSET(ObjectPackageHeader, cruids, 0x08);
RED4EXT_ASSERT_OFFSET(ObjectPackageHeader, package, 0x18);

struct ObjectPackageReader
struct ObjectPackageReader : PackageReader
{
ObjectPackageReader(void* aBuffer, uint32_t aSize);
ObjectPackageReader(const DeferredDataBuffer& aBuffer);
ObjectPackageReader(const DataBuffer& aBuffer);
ObjectPackageReader(const RawBuffer& aBuffer);
using PackageReader::PackageReader;

virtual ~ObjectPackageReader() = default; // 00
virtual void OnReadHeader(uint64_t a1, uint64_t a2); // 08
~ObjectPackageReader() override = default; // 00
void OnReadHeader(uint64_t a1, uint64_t a2) override; // 08

void ReadHeader();
void ReadHeader(ObjectPackageHeader& aOut);

[[nodiscard]] bool IsEmpty() const;

void* buffer; // 08
uint32_t size; // 10
ObjectPackageHeader header; // 18
};
RED4EXT_ASSERT_SIZE(ObjectPackageReader, 0x88);
RED4EXT_ASSERT_OFFSET(ObjectPackageReader, buffer, 0x08);
RED4EXT_ASSERT_OFFSET(ObjectPackageReader, size, 0x10);
RED4EXT_ASSERT_OFFSET(ObjectPackageReader, header, 0x18);

struct ObjectPackageExtractorParams
Expand Down
2 changes: 1 addition & 1 deletion include/RED4ext/ResourceLoader.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ struct ResourceToken
using AllocatorType = Memory::EngineAllocator;
using LoadedCallback = FlexCallback<void (*)(RED4ext::Handle<T>&)>;

ResourceToken() = delete;
ResourceToken() = default;
ResourceToken(const ResourceToken&) = delete;
ResourceToken(ResourceToken&&) = delete;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

#include <cstdint>
#include <RED4ext/Common.hpp>
#include <RED4ext/Scripting/Natives/Generated/world/GlobalNodeRef.hpp>
#include <RED4ext/NativeTypes.hpp>

namespace RED4ext
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
#include <cstdint>
#include <RED4ext/Common.hpp>
#include <RED4ext/DynArray.hpp>
#include <RED4ext/NativeTypes.hpp>
#include <RED4ext/Scripting/Natives/Generated/quest/PrefabVariantReplicatedInfo.hpp>
#include <RED4ext/Scripting/Natives/Generated/world/GlobalNodeRef.hpp>

namespace RED4ext
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

#include <cstdint>
#include <RED4ext/Common.hpp>
#include <RED4ext/Scripting/Natives/Generated/world/GlobalNodeRef.hpp>
#include <RED4ext/NativeTypes.hpp>
#include <RED4ext/Scripting/Natives/Generated/world/QuestPrefabLoadingMode.hpp>

namespace RED4ext
Expand Down

This file was deleted.

1 change: 0 additions & 1 deletion src/Scripting/Natives.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2957,7 +2957,6 @@
#include <RED4ext/Scripting/Natives/Generated/world/GeometryShapeNode.hpp>
#include <RED4ext/Scripting/Natives/Generated/world/GeometryShapeNodeInstance.hpp>
#include <RED4ext/Scripting/Natives/Generated/world/GlobalNodeID.hpp>
#include <RED4ext/Scripting/Natives/Generated/world/GlobalNodeRef.hpp>
#include <RED4ext/Scripting/Natives/Generated/world/GroupProxyMeshBuildParams.hpp>
#include <RED4ext/Scripting/Natives/Generated/world/HeatmapSetup.hpp>
#include <RED4ext/Scripting/Natives/Generated/world/IDestructibleSpotsSystem.hpp>
Expand Down

0 comments on commit ee81545

Please sign in to comment.