2
0
mirror of https://github.com/Laupetin/OpenAssetTools.git synced 2026-01-24 17:03:05 +00:00

chore: dump fastfile data when xenon t6 fastfile is detected

This commit is contained in:
Jan Laupetin
2025-08-19 13:22:39 +02:00
parent facb95f1cb
commit 802b0f244a
19 changed files with 226 additions and 152 deletions

View File

@@ -1,11 +1,14 @@
#include "ProcessorXChunks.h"
#include "Loading/Exception/InvalidChunkSizeException.h"
#include "Utils/Endianness.h"
#include "Zone/ZoneTypes.h"
#include <cassert>
#include <condition_variable>
#include <cstring>
#include <format>
#include <iostream>
#include <memory>
#include <mutex>
#include <optional>
@@ -125,8 +128,9 @@ namespace
class ProcessorXChunks final : public processor::IProcessorXChunks
{
public:
ProcessorXChunks(const int numStreams, const size_t xChunkSize, const std::optional<size_t> vanillaBufferSize)
ProcessorXChunks(const int numStreams, const size_t xChunkSize, const GameEndianness endianness, const std::optional<size_t> vanillaBufferSize)
: m_chunk_size(xChunkSize),
m_endianness(endianness),
m_vanilla_buffer_size(vanillaBufferSize),
m_initialized_streams(false),
m_current_stream(0),
@@ -227,6 +231,11 @@ namespace
return;
}
if (m_endianness == GameEndianness::LITTLE_ENDIAN)
chunkSize = endianness::FromLittleEndian(chunkSize);
else
chunkSize = endianness::FromBigEndian(chunkSize);
if (chunkSize > m_chunk_size)
{
throw InvalidChunkSizeException(chunkSize, m_chunk_size);
@@ -280,6 +289,7 @@ namespace
std::vector<std::unique_ptr<DbLoadStream>> m_streams;
size_t m_chunk_size;
GameEndianness m_endianness;
std::optional<size_t> m_vanilla_buffer_size;
std::vector<std::unique_ptr<IXChunkProcessor>> m_chunk_processors;
@@ -297,13 +307,14 @@ namespace
namespace processor
{
std::unique_ptr<IProcessorXChunks> CreateProcessorXChunks(int numStreams, const size_t xChunkSize)
std::unique_ptr<IProcessorXChunks> CreateProcessorXChunks(unsigned numStreams, const size_t xChunkSize, const GameEndianness endianness)
{
return std::make_unique<ProcessorXChunks>(numStreams, xChunkSize, std::nullopt);
return std::make_unique<ProcessorXChunks>(numStreams, xChunkSize, endianness, std::nullopt);
}
std::unique_ptr<IProcessorXChunks> CreateProcessorXChunks(int numStreams, const size_t xChunkSize, const size_t vanillaBufferSize)
std::unique_ptr<IProcessorXChunks>
CreateProcessorXChunks(unsigned numStreams, const size_t xChunkSize, GameEndianness endianness, const size_t vanillaBufferSize)
{
return std::make_unique<ProcessorXChunks>(numStreams, xChunkSize, vanillaBufferSize);
return std::make_unique<ProcessorXChunks>(numStreams, xChunkSize, endianness, vanillaBufferSize);
}
} // namespace processor

View File

@@ -1,4 +1,6 @@
#pragma once
#include "Game/IGame.h"
#include "Loading/StreamProcessor.h"
#include "Zone/XChunk/IXChunkProcessor.h"
@@ -12,6 +14,6 @@ namespace processor
virtual void AddChunkProcessor(std::unique_ptr<IXChunkProcessor> chunkProcessor) = 0;
};
std::unique_ptr<IProcessorXChunks> CreateProcessorXChunks(int numStreams, size_t xChunkSize);
std::unique_ptr<IProcessorXChunks> CreateProcessorXChunks(int numStreams, size_t xChunkSize, size_t vanillaBufferSize);
std::unique_ptr<IProcessorXChunks> CreateProcessorXChunks(unsigned numStreams, size_t xChunkSize, GameEndianness endianness);
std::unique_ptr<IProcessorXChunks> CreateProcessorXChunks(unsigned numStreams, size_t xChunkSize, GameEndianness endianness, size_t vanillaBufferSize);
} // namespace processor