You've already forked Scarlet-Exlaunch-Base
mirror of
https://github.com/CraftyBoss/Scarlet-Exlaunch-Base.git
synced 2026-07-14 05:07:32 -07:00
remove file size limitation
This commit is contained in:
@@ -24,7 +24,7 @@ struct FlatBufferLoaderInfo
|
||||
struct FlatBufferLoader
|
||||
{
|
||||
void *__vftable;
|
||||
void* field_8;
|
||||
void *field_8;
|
||||
char gap_10[48];
|
||||
FlatBufferLoaderInfo *mFileInfo;
|
||||
char gap_48[88];
|
||||
@@ -33,17 +33,20 @@ struct FlatBufferLoader
|
||||
bool field_A8;
|
||||
FlatBufferReadInfo mReadInfo;
|
||||
char gap_C8[128];
|
||||
void* field_148;
|
||||
void* field_150;
|
||||
void* field_158;
|
||||
char gap_160[32];
|
||||
void *field_148;
|
||||
void *field_150;
|
||||
void *field_158;
|
||||
void *field_160;
|
||||
void *mAllocator1;
|
||||
char gap_170[16];
|
||||
int field_180;
|
||||
void* struct_188;
|
||||
void* field_190;
|
||||
char gap_188[70];
|
||||
long field_1E0;
|
||||
void *struct_188;
|
||||
void *field_190;
|
||||
char gap_188[64];
|
||||
long mBufferSize;
|
||||
long mReadPosition;
|
||||
void *mFlatBuffer;
|
||||
void* class_1F0;
|
||||
void* field_1F8;
|
||||
void* field_200;
|
||||
void *mAllocator2;
|
||||
void *field_1F8;
|
||||
void *field_200;
|
||||
};
|
||||
+60
-26
@@ -61,41 +61,69 @@ HOOK_DEFINE_REPLACE(AbortImplOverloadHook) {
|
||||
}
|
||||
};
|
||||
|
||||
// this isnt 100% working yet i believe, needs more testing
|
||||
FlatBufferReadInfo newReadInfo;
|
||||
nn::Result readResult = -1;
|
||||
|
||||
void NOINLINE fileRedirectionFunc(FlatBufferLoader *loader) {
|
||||
if(loader->mFileInfo && loader->field_148 && loader->field_A8) {
|
||||
|
||||
if(isEqualSubString(loader->mFileInfo->mPath, "chara/share/cm_drs")) {
|
||||
Logger::log("Path: %s\n", loader->mFileInfo->mPath);
|
||||
}
|
||||
|
||||
readResult = nn::fs::OpenFile(&newReadInfo.mHandle, loader->mFileInfo->mPath, nn::fs::OpenMode::OpenMode_Read);
|
||||
|
||||
if(readResult.isSuccess()) {
|
||||
|
||||
Logger::log("Found Replacement file in romfs!\n");
|
||||
|
||||
Logger::log("Path: %s\n", loader->mFileInfo->mPath);
|
||||
|
||||
nn::fs::GetFileSize(&newReadInfo.mSize, newReadInfo.mHandle);
|
||||
|
||||
Logger::log("Original Size: %lu New Size: %lu\n", loader->mBufferSize, newReadInfo.mSize);
|
||||
|
||||
loader->mBufferSize = newReadInfo.mSize;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
HOOK_DEFINE_TRAMPOLINE(FlatBufferCreateFlatBufferHook) {
|
||||
static FlatBufferReadResult Callback(FlatBufferLoader *thisPtr) {
|
||||
fileRedirectionFunc(thisPtr);
|
||||
return Orig(thisPtr);
|
||||
}
|
||||
};
|
||||
|
||||
HOOK_DEFINE_TRAMPOLINE(FlatBufferCreateFlatBuffer2Hook) {
|
||||
static FlatBufferReadResult Callback(FlatBufferLoader *thisPtr) {
|
||||
fileRedirectionFunc(thisPtr);
|
||||
return Orig(thisPtr);
|
||||
}
|
||||
};
|
||||
|
||||
HOOK_DEFINE_TRAMPOLINE(FlatBufferCreateFlatBuffer3Hook) {
|
||||
static FlatBufferReadResult Callback(FlatBufferLoader *thisPtr) {
|
||||
fileRedirectionFunc(thisPtr);
|
||||
return Orig(thisPtr);
|
||||
}
|
||||
};
|
||||
|
||||
HOOK_DEFINE_TRAMPOLINE(FlatBufferLoaderHook) {
|
||||
static FlatBufferReadResult Callback(FlatBufferLoader *thisPtr, void *buffer, ulong bufferSize) {
|
||||
|
||||
if(thisPtr->mFileInfo && thisPtr->field_148 && thisPtr->field_A8) {
|
||||
|
||||
// Logger::log("Size: %lu Path: %s\n", bufferSize, thisPtr->mFileInfo->mPath);
|
||||
if(readResult.isSuccess()) {
|
||||
|
||||
FlatBufferReadInfo newReadInfo;
|
||||
newReadInfo.mPosition = 0;
|
||||
|
||||
nn::Result result = nn::fs::OpenFile(&newReadInfo.mHandle, thisPtr->mFileInfo->mPath, nn::fs::OpenMode::OpenMode_Read);
|
||||
auto result = BinaryPointers::instance().readFileToBuffer(&newReadInfo, buffer, bufferSize);
|
||||
|
||||
if(result.isSuccess()) {
|
||||
thisPtr->field_180 = 1;
|
||||
thisPtr->mReadPosition = newReadInfo.mPosition;
|
||||
|
||||
Logger::log("Path: %s\n",thisPtr->mFileInfo->mPath);
|
||||
|
||||
Logger::log("Found Replacement file in romfs!\n");
|
||||
|
||||
nn::fs::GetFileSize(&newReadInfo.mSize, newReadInfo.mHandle);
|
||||
|
||||
Logger::log("Original Size: %lu New Size: %lu\n", bufferSize, newReadInfo.mSize);
|
||||
|
||||
if(bufferSize >= newReadInfo.mSize) {
|
||||
newReadInfo.mPosition = 0;
|
||||
|
||||
auto result = BinaryPointers::instance().readFileToBuffer(&newReadInfo, buffer, bufferSize);
|
||||
|
||||
thisPtr->field_180 = 1;
|
||||
thisPtr->field_1E0 = newReadInfo.mPosition;
|
||||
|
||||
return result;
|
||||
|
||||
}else {
|
||||
Logger::log("Replacement file is larger than original! Unable to Load all data into existing Buffer.\n");
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -122,6 +150,12 @@ extern "C" void exl_main(void* x0, void* x1) {
|
||||
|
||||
FlatBufferLoaderHook::InstallAtOffset(0xBEBCD4);
|
||||
|
||||
FlatBufferCreateFlatBufferHook::InstallAtOffset(0xBEBB90);
|
||||
|
||||
FlatBufferCreateFlatBuffer2Hook::InstallAtOffset(0x1DD78A4);
|
||||
|
||||
FlatBufferCreateFlatBuffer3Hook::InstallAtOffset(0x1E211B0);
|
||||
|
||||
runCodePatches();
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user