Compare commits

..

No commits in common. "master" and "v1.3" have entirely different histories.
master ... v1.3

6 changed files with 129 additions and 144 deletions

View File

@ -15,7 +15,7 @@ jobs:
- name: Create Build Environment - name: Create Build Environment
run: | run: |
sudo apt-get update sudo apt-get update
sudo apt-get install -y build-essential libgl1-mesa-dev libglvnd-dev cmake qt6-base-dev sudo apt-get install -y build-essential libgl1-mesa-dev and libglvnd-dev cmake qt6-base-dev
mkdir build mkdir build
- name: Configure CMake - name: Configure CMake
@ -51,54 +51,30 @@ jobs:
- name: Install Qt - name: Install Qt
uses: jurplel/install-qt-action@v4 uses: jurplel/install-qt-action@v4
with: with:
version: "6.7.2" version: '6.7.2'
- name: Install CMake - name: Install CMake
uses: lukka/get-cmake@latest uses: lukka/get-cmake@latest
- name: Create Build Environment - name: Create Build Environment
run: | run: |
mkdir -p build/x86_64 build/arm64 build/universal mkdir build
- name: Configure CMake (x86_64) - name: Configure CMake
working-directory: ${{ github.workspace }}/build/x86_64 working-directory: ${{github.workspace}}/build
shell: bash shell: bash
run: | run: |
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_ARCHITECTURES=x86_64 ../.. cmake -DCMAKE_BUILD_TYPE=Release ..
- name: Configure CMake (arm64) - name: Build
working-directory: ${{ github.workspace }}/build/arm64 working-directory: ${{github.workspace}}/build
shell: bash
run: |
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_ARCHITECTURES=arm64 ../..
- name: Build (x86_64)
working-directory: ${{ github.workspace }}/build/x86_64
shell: bash shell: bash
run: | run: |
make -j4 make -j4
macdeployqt NDSFactory.app
- name: Build (arm64)
working-directory: ${{ github.workspace }}/build/arm64
shell: bash
run: |
make -j4
- name: Create Universal Binary
working-directory: ${{ github.workspace }}/build
shell: bash
run: |
cp -R x86_64/NDSFactory.app universal/
lipo -create -output universal/NDSFactory.app/Contents/MacOS/NDSFactory x86_64/NDSFactory.app/Contents/MacOS/NDSFactory arm64/NDSFactory.app/Contents/MacOS/NDSFactory
- name: Deploy Qt Frameworks
working-directory: ${{ github.workspace }}/build/universal
shell: bash
run: |
macdeployqt NDSFactory.app -verbose=1
- name: Archive Artifact - name: Archive Artifact
working-directory: ${{ github.workspace }}/build/universal working-directory: ${{github.workspace}}/build
shell: bash shell: bash
run: | run: |
zip -r NDSFactory-${{ github.ref_name }}-macOS.zip NDSFactory.app ../README.md ../LICENSE zip -r NDSFactory-${{ github.ref_name }}-macOS.zip NDSFactory.app ../README.md ../LICENSE
@ -107,7 +83,7 @@ jobs:
uses: softprops/action-gh-release@v2.0.8 uses: softprops/action-gh-release@v2.0.8
if: startsWith(github.ref, 'refs/tags/') if: startsWith(github.ref, 'refs/tags/')
with: with:
files: "build/universal/NDSFactory-${{ github.ref_name }}-macOS.zip" files: "build/NDSFactory-${{ github.ref_name }}-macOS.zip"
build-windows: build-windows:
runs-on: windows-latest runs-on: windows-latest
@ -118,7 +94,7 @@ jobs:
- name: Install Qt - name: Install Qt
uses: jurplel/install-qt-action@v4 uses: jurplel/install-qt-action@v4
with: with:
version: "6.7.2" version: '6.7.2'
- name: Install CMake - name: Install CMake
uses: lukka/get-cmake@latest uses: lukka/get-cmake@latest

View File

@ -52,7 +52,6 @@ In this tab, you can:
* extract the FAT files from fat_data.bin. * extract the FAT files from fat_data.bin.
* rebuild the FAT files into a new fat.bin and fat_data.bin. * rebuild the FAT files into a new fat.bin and fat_data.bin.
If the ROM contains ARM9/ARM7 overlays you must provide the original fat.bin to extract the overlay offsets. If the ROM contains ARM9/ARM7 overlays you must provide the original fat.bin to extract the overlay offsets.
WARNING: DO NOT MODIFY FAT FILES NAMES OR EXTENSIONS, OR YOU WILL NEED A NEW fnt.bin. WARNING: DO NOT MODIFY FAT FILES NAMES OR EXTENSIONS, OR YOU WILL NEED A NEW fnt.bin.
* patch the FAT section (fat.bin): this is only necessary if the FAT files' final address (fat_data.bin) differs from the original. * patch the FAT section (fat.bin): this is only necessary if the FAT files' final address (fat_data.bin) differs from the original.
Patching the FAT is straightforward: load your fat.bin, and fill in the original and new addresses of fat_data.bin. This will produce a patched fat.bin for use in the packing process. Patching the FAT is straightforward: load your fat.bin, and fill in the original and new addresses of fat_data.bin. This will produce a patched fat.bin for use in the packing process.
@ -61,6 +60,5 @@ In this tab, you can:
If you find a bug, feel free to open an issue or submit a pull request :) If you find a bug, feel free to open an issue or submit a pull request :)
Special thanks to [Antonio Barba](https://github.com/antoniobarba) & [Davide Trogu](https://github.com/Dax89) ## Developed with ❤ by Luca D'Amico
## Special thanks to Antonio Barba & Davide Trogu
Developed with ❤ by Luca D'Amico

View File

@ -55,7 +55,8 @@ NFResult NDSFactory::dumpDataFromFile(const std::string& romPath, const std::str
bool NDSFactory::logToFile(const std::string& logPath, const std::string& log) bool NDSFactory::logToFile(const std::string& logPath, const std::string& log)
{ {
std::ofstream savedFile(logPath, std::ios::out | std::ios::binary | std::ios::app); std::ofstream savedFile(logPath, std::ios::out | std::ios::binary | std::ios::app);
if (!savedFile.is_open()) return false; if (!savedFile.is_open())
return false;
savedFile.write(log.c_str(), log.size()); savedFile.write(log.c_str(), log.size());
savedFile.close(); savedFile.close();
@ -307,7 +308,7 @@ NFResult NDSFactory::buildFatData(const std::string& fatDataDirPath, const std::
std::vector<char> fntBytes; std::vector<char> fntBytes;
std::vector<FatFileID> fileIDs; std::vector<FatFileID> fileIDs;
std::ifstream fileIDsFile(fatDataDirPath + "/_file_IDs.txt", std::ios::in); std::ifstream fileIDsFile(fatDataDirPath + "/_file_IDs.txt", std::ios::in | std::ios::beg);
if (!fileIDsFile.is_open()) return { false, "Error opening file: " + fatDataDirPath + "/_file_IDs.txt" }; if (!fileIDsFile.is_open()) return { false, "Error opening file: " + fatDataDirPath + "/_file_IDs.txt" };
std::string fileIDsLine; std::string fileIDsLine;
while (std::getline(fileIDsFile, fileIDsLine)) while (std::getline(fileIDsFile, fileIDsLine))
@ -330,7 +331,7 @@ NFResult NDSFactory::buildFatData(const std::string& fatDataDirPath, const std::
int firstFileId = fatFileID.id; int firstFileId = fatFileID.id;
if (firstFileId > 0) if (firstFileId > 0)
{ {
std::ifstream originalFatFile(originalFatPath, std::ios::in | std::ios::binary); std::ifstream originalFatFile(originalFatPath, std::ios::in | std::ios::binary | std::ios::beg);
if (!originalFatFile.is_open()) return { false, "Error opening file: " + originalFatPath }; if (!originalFatFile.is_open()) return { false, "Error opening file: " + originalFatPath };
std::vector<char> ovrBytes; std::vector<char> ovrBytes;
uint32_t requiredBytes = firstFileId * sizeof(FatRange); uint32_t requiredBytes = firstFileId * sizeof(FatRange);

View File

@ -42,7 +42,7 @@
<bool>false</bool> <bool>false</bool>
</property> </property>
<property name="text"> <property name="text">
<string>NDSFactory V1.3.2</string> <string>NDSFactory V1.3</string>
</property> </property>
<property name="alignment"> <property name="alignment">
<set>Qt::AlignmentFlag::AlignCenter</set> <set>Qt::AlignmentFlag::AlignCenter</set>
@ -58,7 +58,7 @@
</rect> </rect>
</property> </property>
<property name="text"> <property name="text">
<string>(C) 2019-2025 - Luca D'Amico</string> <string>(C) 2019-2024 - Luca D'Amico</string>
</property> </property>
<property name="alignment"> <property name="alignment">
<set>Qt::AlignmentFlag::AlignCenter</set> <set>Qt::AlignmentFlag::AlignCenter</set>

View File

@ -1,6 +1,6 @@
#ifndef REVISION_H #ifndef REVISION_H
#define REVISION_H #define REVISION_H
#define GIT_COMMIT_HASH "c916f47" #define GIT_COMMIT_HASH "dec5243"
#endif #endif

View File

@ -39,7 +39,8 @@ void MainWindow::on_unpackerDumpHeaderBtn_clicked()
QString dirPath = customSaveFileDialog("NDS Header", "header.bin", "Binary (*.bin)"); QString dirPath = customSaveFileDialog("NDS Header", "header.bin", "Binary (*.bin)");
if (!dirPath.isNull()) notifyExtractionResult(dumpHeader(dirPath.toStdString())); if (!dirPath.isNull())
notifyExtractionResult(dumpHeader(dirPath.toStdString()));
ui->unpackerDumpHeaderBtn->setEnabled(true); ui->unpackerDumpHeaderBtn->setEnabled(true);
} }
@ -56,7 +57,8 @@ void MainWindow::on_unpackerDumpArm9Btn_clicked()
"Do you want to dump the extra 12 bytes? (click yes if you want a 1:1 arm9 dump)", "Do you want to dump the extra 12 bytes? (click yes if you want a 1:1 arm9 dump)",
QMessageBox::Yes|QMessageBox::No); QMessageBox::Yes|QMessageBox::No);
if (!dirPath.isNull()) notifyExtractionResult(dumpArm9Bin(dirPath.toStdString(), dumpExtraBytes == QMessageBox::Yes ? true : false)); if (!dirPath.isNull())
notifyExtractionResult(dumpArm9Bin(dirPath.toStdString(), dumpExtraBytes == QMessageBox::Yes ? true : false));
ui->unpackerDumpArm9Btn->setEnabled(true); ui->unpackerDumpArm9Btn->setEnabled(true);
} }
@ -67,7 +69,8 @@ void MainWindow::on_unpackerDumpArm7Btn_clicked()
QString dirPath = customSaveFileDialog("NDS ARM7", "arm7.bin", "Binary (*.bin)"); QString dirPath = customSaveFileDialog("NDS ARM7", "arm7.bin", "Binary (*.bin)");
if (!dirPath.isNull()) notifyExtractionResult(dumpArm7Bin(dirPath.toStdString())); if (!dirPath.isNull())
notifyExtractionResult(dumpArm7Bin(dirPath.toStdString()));
ui->unpackerDumpArm7Btn->setEnabled(true); ui->unpackerDumpArm7Btn->setEnabled(true);
} }
@ -78,7 +81,8 @@ void MainWindow::on_unpackerDumpFntBtn_clicked()
QString dirPath = customSaveFileDialog("NDS FNT", "fnt.bin", "Binary (*.bin)"); QString dirPath = customSaveFileDialog("NDS FNT", "fnt.bin", "Binary (*.bin)");
if (!dirPath.isNull()) notifyExtractionResult(dumpFnt(dirPath.toStdString())); if (!dirPath.isNull())
notifyExtractionResult(dumpFnt(dirPath.toStdString()));
ui->unpackerDumpFntBtn->setEnabled(true); ui->unpackerDumpFntBtn->setEnabled(true);
} }
@ -89,7 +93,8 @@ void MainWindow::on_unpackerDumpFatBtn_clicked()
QString dirPath = customSaveFileDialog("NDS FAT", "fat.bin", "Binary (*.bin)"); QString dirPath = customSaveFileDialog("NDS FAT", "fat.bin", "Binary (*.bin)");
if (!dirPath.isNull()) notifyExtractionResult(dumpFat(dirPath.toStdString())); if (!dirPath.isNull())
notifyExtractionResult(dumpFat(dirPath.toStdString()));
ui->unpackerDumpFatBtn->setEnabled(true); ui->unpackerDumpFatBtn->setEnabled(true);
} }
@ -100,7 +105,8 @@ void MainWindow::on_unpackerDumpArm9OverlayBtn_clicked()
QString dirPath = customSaveFileDialog("NDS ARM9 Overlay", "a9ovr.bin", "Binary (*.bin)"); QString dirPath = customSaveFileDialog("NDS ARM9 Overlay", "a9ovr.bin", "Binary (*.bin)");
if (!dirPath.isNull()) notifyExtractionResult(dumpArm9Overlay(dirPath.toStdString())); if (!dirPath.isNull())
notifyExtractionResult(dumpArm9Overlay(dirPath.toStdString()));
ui->unpackerDumpArm9OverlayBtn->setEnabled(true); ui->unpackerDumpArm9OverlayBtn->setEnabled(true);
} }
@ -111,7 +117,8 @@ void MainWindow::on_unpackerDumpArm7OverlayBtn_clicked()
QString dirPath = customSaveFileDialog("NDS ARM7 Overlay", "a7ovr.bin", "Binary (*.bin)"); QString dirPath = customSaveFileDialog("NDS ARM7 Overlay", "a7ovr.bin", "Binary (*.bin)");
if (!dirPath.isNull()) notifyExtractionResult(dumpArm7Overlay(dirPath.toStdString())); if (!dirPath.isNull())
notifyExtractionResult(dumpArm7Overlay(dirPath.toStdString()));
ui->unpackerDumpArm7OverlayBtn->setEnabled(true); ui->unpackerDumpArm7OverlayBtn->setEnabled(true);
} }
@ -122,7 +129,8 @@ void MainWindow::on_unpackerDumpIconTitleLogoBtn_clicked()
QString dirPath = customSaveFileDialog("NDS IconTitleLogo", "itl.bin", "Binary (*.bin)"); QString dirPath = customSaveFileDialog("NDS IconTitleLogo", "itl.bin", "Binary (*.bin)");
if (!dirPath.isNull()) notifyExtractionResult(dumpIconTitle(dirPath.toStdString())); if (!dirPath.isNull())
notifyExtractionResult(dumpIconTitle(dirPath.toStdString()));
ui->unpackerDumpIconTitleLogoBtn->setEnabled(true); ui->unpackerDumpIconTitleLogoBtn->setEnabled(true);
} }
@ -133,7 +141,8 @@ void MainWindow::on_unpackerDumpFatFilesBtn_clicked()
QString dirPath = customSaveFileDialog("NDS FAT Files", "fat_data.bin", "Binary (*.bin)"); QString dirPath = customSaveFileDialog("NDS FAT Files", "fat_data.bin", "Binary (*.bin)");
if (!dirPath.isNull()) notifyExtractionResult(dumpFatFiles(dirPath.toStdString())); if (!dirPath.isNull())
notifyExtractionResult(dumpFatFiles(dirPath.toStdString()));
ui->unpackerDumpFatFilesBtn->setEnabled(true); ui->unpackerDumpFatFilesBtn->setEnabled(true);
} }
@ -144,7 +153,8 @@ void MainWindow::on_unpackerDumpArm9OverlayFilesBtn_clicked()
QString dirPath = customSaveFileDialog("NDS ARM9 Overlay Data", "a9ovr_data.bin", "Binary (*.bin)"); QString dirPath = customSaveFileDialog("NDS ARM9 Overlay Data", "a9ovr_data.bin", "Binary (*.bin)");
if (!dirPath.isNull()) notifyExtractionResult(dumpArm9OverlayFiles(dirPath.toStdString())); if (!dirPath.isNull())
notifyExtractionResult(dumpArm9OverlayFiles(dirPath.toStdString()));
ui->unpackerDumpArm9OverlayFilesBtn->setEnabled(true); ui->unpackerDumpArm9OverlayFilesBtn->setEnabled(true);
} }