allow more than one savefile
This commit is contained in:
parent
b0e7860be9
commit
f1415e66a3
|
@ -66,7 +66,7 @@ int32_t GetBanerSize(uint16_t banner_type) {
|
||||||
return NDS_BANNER_SIZE_ORIGINAL;
|
return NDS_BANNER_SIZE_ORIGINAL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void ReplaceBanner(const std::string& target, const std::string& input, const std::string& output) {
|
void ReplaceBanner(const std::string& target, const std::string& input, const std::string& output, const std::string& gameidhex) {
|
||||||
std::string destination = target;
|
std::string destination = target;
|
||||||
std::ifstream infile(input, std::ifstream::binary);
|
std::ifstream infile(input, std::ifstream::binary);
|
||||||
if(!output.empty()) {
|
if(!output.empty()) {
|
||||||
|
@ -135,7 +135,7 @@ void ReplaceBanner(const std::string& target, const std::string& input, const st
|
||||||
tsrlheader.gamecode[0] = isrlheader.gamecode[0];
|
tsrlheader.gamecode[0] = isrlheader.gamecode[0];
|
||||||
tsrlheader.gamecode[1] = isrlheader.gamecode[1];
|
tsrlheader.gamecode[1] = isrlheader.gamecode[1];
|
||||||
tsrlheader.gamecode[2] = isrlheader.gamecode[2];
|
tsrlheader.gamecode[2] = isrlheader.gamecode[2];
|
||||||
tsrlheader.gamecode[3] = isrlheader.gamecode[3];
|
tsrlheader.gamecode[3] = stoi(gameidhex.substr(6, 2), 0, 16);
|
||||||
ttwlheader.tid_low = tsrlheader.gamecode[3] | (tsrlheader.gamecode[2] << 8) | (tsrlheader.gamecode[1] << 16) | (tsrlheader.gamecode[0] << 24);
|
ttwlheader.tid_low = tsrlheader.gamecode[3] | (tsrlheader.gamecode[2] << 8) | (tsrlheader.gamecode[1] << 16) | (tsrlheader.gamecode[0] << 24);
|
||||||
trfile.seekg(0, trfile.beg);
|
trfile.seekg(0, trfile.beg);
|
||||||
trfile.write((char*)&tsrlheader, sizeof(tsrlheader));
|
trfile.write((char*)&tsrlheader, sizeof(tsrlheader));
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
void ReplaceBanner(const std::string& target, const std::string& input, const std::string& output);
|
void ReplaceBanner(const std::string& target, const std::string& input, const std::string& output, const std::string& gamehexid);
|
||||||
void Patch(const std::string& name, bool backup);
|
void Patch(const std::string& name, bool backup);
|
||||||
void MakeTmd(const std::string& target, const std::string& destination = "");
|
void MakeTmd(const std::string& target, const std::string& destination = "");
|
||||||
int PathStringReplace(std::string path);
|
int PathStringReplace(std::string path);
|
||||||
|
|
|
@ -73,8 +73,11 @@ void WriteMessage(std::string text, bool clear = false, PrintConsole* screen = n
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
menu savefilemenu;
|
||||||
menu yesno;
|
menu yesno;
|
||||||
|
|
||||||
|
std::string saveformat = ".sav";
|
||||||
|
|
||||||
void displayInit() {
|
void displayInit() {
|
||||||
lowerScreen = *consoleDemoInit();
|
lowerScreen = *consoleDemoInit();
|
||||||
videoSetMode(MODE_0_2D);
|
videoSetMode(MODE_0_2D);
|
||||||
|
@ -172,6 +175,9 @@ void CreateForwarder() {
|
||||||
PrintError(5);
|
PrintError(5);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (saveformat != ".sav") {
|
||||||
|
gameidhex = gameidhex.replace(6, 2, string_to_hex(saveformat.substr(4, 1)));
|
||||||
|
}
|
||||||
std::string folderpath("sd:/title/00030004/" + gameidhex);
|
std::string folderpath("sd:/title/00030004/" + gameidhex);
|
||||||
|
|
||||||
if(fileExists(folderpath + "/content/00000000.app")) {
|
if(fileExists(folderpath + "/content/00000000.app")) {
|
||||||
|
@ -185,7 +191,7 @@ void CreateForwarder() {
|
||||||
|
|
||||||
WriteMessage("Creating forwarder", true, &lowerScreen);
|
WriteMessage("Creating forwarder", true, &lowerScreen);
|
||||||
|
|
||||||
ReplaceBanner("sd:/MakeForwarder/template.nds", file, "sd:/MakeForwarder/banner.nds");
|
ReplaceBanner("sd:/MakeForwarder/template.nds", file, "sd:/MakeForwarder/banner.nds", gameidhex);
|
||||||
|
|
||||||
Patch("sd:/MakeForwarder/banner.nds", false);
|
Patch("sd:/MakeForwarder/banner.nds", false);
|
||||||
|
|
||||||
|
@ -209,7 +215,7 @@ void CreateForwarder() {
|
||||||
std::string save = file;
|
std::string save = file;
|
||||||
auto it = std::find(save.rbegin(), save.rend(), '/');
|
auto it = std::find(save.rbegin(), save.rend(), '/');
|
||||||
save.insert(save.rend() - it, "saves/");
|
save.insert(save.rend() - it, "saves/");
|
||||||
std::string savePath = ReplaceAll(save, ".nds", ".sav");
|
std::string savePath = ReplaceAll(save, ".nds", saveformat);
|
||||||
bootstrap_template.SetValue("NDS-BOOTSTRAP", "SAV_PATH", savePath.c_str());
|
bootstrap_template.SetValue("NDS-BOOTSTRAP", "SAV_PATH", savePath.c_str());
|
||||||
bootstrap_template.SaveFile(folderpath + "/data/bootstrap.ini");
|
bootstrap_template.SaveFile(folderpath + "/data/bootstrap.ini");
|
||||||
}
|
}
|
||||||
|
@ -247,6 +253,16 @@ void CheckResources() {
|
||||||
PrintError(4, true);
|
PrintError(4, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SetSavefile() {
|
||||||
|
WriteMessage("Select your target save file", true, &upperScreen);
|
||||||
|
int ret = savefilemenu.DoMenu(&lowerScreen);
|
||||||
|
if(ret != 0) {
|
||||||
|
saveformat = ".sav" + std::to_string(ret);
|
||||||
|
}
|
||||||
|
consoleSelect(&upperScreen);
|
||||||
|
consoleClear();
|
||||||
|
}
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
displayInit();
|
displayInit();
|
||||||
consoleSetWindow(&upperScreen, 0, 0, DISPLAY_COLUMNS, 3);
|
consoleSetWindow(&upperScreen, 0, 0, DISPLAY_COLUMNS, 3);
|
||||||
|
@ -258,6 +274,17 @@ int main() {
|
||||||
menu mainmenu;
|
menu mainmenu;
|
||||||
mainmenu.AddOption("Create Forwarder");
|
mainmenu.AddOption("Create Forwarder");
|
||||||
mainmenu.AddOption("Set target bootstrap");
|
mainmenu.AddOption("Set target bootstrap");
|
||||||
|
mainmenu.AddOption("Select target save file");
|
||||||
|
savefilemenu.AddOption("Default Save file (.sav)");
|
||||||
|
savefilemenu.AddOption("Save file 1 (.sav1)");
|
||||||
|
savefilemenu.AddOption("Save file 2 (.sav2)");
|
||||||
|
savefilemenu.AddOption("Save file 3 (.sav3)");
|
||||||
|
savefilemenu.AddOption("Save file 4 (.sav4)");
|
||||||
|
savefilemenu.AddOption("Save file 5 (.sav5)");
|
||||||
|
savefilemenu.AddOption("Save file 6 (.sav6)");
|
||||||
|
savefilemenu.AddOption("Save file 7 (.sav7)");
|
||||||
|
savefilemenu.AddOption("Save file 8 (.sav8)");
|
||||||
|
savefilemenu.AddOption("Save file 9 (.sav9)");
|
||||||
yesno.AddOption("Yes");
|
yesno.AddOption("Yes");
|
||||||
yesno.AddOption("No");
|
yesno.AddOption("No");
|
||||||
while(true) {
|
while(true) {
|
||||||
|
@ -268,6 +295,9 @@ int main() {
|
||||||
CreateForwarder();
|
CreateForwarder();
|
||||||
else if(ret == 1)
|
else if(ret == 1)
|
||||||
SetBootstrap();
|
SetBootstrap();
|
||||||
|
else if(ret == 2) {
|
||||||
|
SetSavefile();
|
||||||
|
}
|
||||||
else
|
else
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue