diff --git a/Makefile b/Makefile index 9ab306f..c11b6d5 100644 --- a/Makefile +++ b/Makefile @@ -39,7 +39,7 @@ LOGO := UNIQUE_ID := 0xBCFFF PRODUCT_CODE := CTR-HB-CKPT -VERSION_MAJOR := 1 +VERSION_MAJOR := 2 VERSION_MINOR := 0 VERSION_MICRO := 0 diff --git a/README.md b/README.md index 5580fa3..66585df 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Checkpoint -A fast and simple save manager for cfw/rosalina written in C++. +A fast and simple save manager for cfw/Rosalina-based Homebrew Launchers written in C++. ![](https://i.imgur.com/dl6ihmC.png) @@ -8,26 +8,28 @@ A fast and simple save manager for cfw/rosalina written in C++. Checkpoint is created with the idea of simplicity and efficiency. The UI has been designed to condense more option as possible but keeping it simple to do operations with. -Moreover, Checkpoint is really lightweight and it's built using very few (and up-to-date) libraries. It also doesn't have any assets in it, while being packaged with a nice graphic user interface. +Moreover, Checkpoint is really lightweight and it's built using very few (and up-to-date) libraries. It also does only have a minimum amount of assets in it, while being packaged with a nice graphic user interface. -Checkpoint supports normal titles and demos. It also automatically checks and filters homebrew titles which may not have any save archive to backup or restore: this is done without the need of external lists of titles to filter needing to be updated periodically with new titles. For this reason, Checkpoint doesn't need the user maintenance to always be fully functional. +Checkpoint supports DS cartridges, normal titles and demos. It also automatically checks and filters homebrew titles which may not have any save archive to backup or restore: this is done without the need of external lists of titles to filter needing to be updated periodically with new titles. For this reason, Checkpoint doesn't need the user maintenance to always be fully functional. ## Working path Checkpoint uses the following folders to store the files it generates. Note that all the working directories are automatically generated on first launch (or when Checkpoint finds a new title that doesn't have a working directory yet). -* **`sdmc:/Checkpoint`**: root path -* **`sdmc:/Checkpoint/saves/`**: root path for all the save backups for a generic game -* **`sdmc:/CHeckpoint/extdata/`**: root path for all the extdata backups for a generic game +* **`sdmc:/3ds/Checkpoint`**: root path +* **`sdmc:/3ds/Checkpoint/saves/ `**: root path for all the save backups for a generic game +* **`sdmc:/3ds/Checkpoint/extdata/ `**: root path for all the extdata backups for a generic game ## Usage -You can use Checkpoint with both cfw and rosalina-based Homebrew Launcher. *hax-based Homebrew Launcher entrypoint is not supported by Checkpoint. +You can use Checkpoint with both cfw and Rosalina-based Homebrew Launcher. *hax-based Homebrew Launchers are not supported by Checkpoint. The first launch will take a long amount of time (usually 2-3 minutes depending on how many titles you have installed), due to the working directories being created. The next time you launch Checkpoint it will be significatively faster. You can scroll between the title list with the DPAD/LR and target a title with A when the selector is on it. Now, you can use the DPAD or the touchscreen to select a target backup to restore/overwrite. +If you want to have DS cartridge recognition with Rosalina-based Homebrew Launchers: inject the Homebrew Launcher in a title with has access to DS saves. + ## Issues Checkpoint displays error codes when something weird happens or operations fail. Report back the error code and a summary of your operations to reproduce it if the issue hasn't been discussed in the past ones yet. @@ -42,4 +44,6 @@ This project is licensed under the GNU GPLv3. See [LICENSE.md](https://github.co ## Credits -Even though this is the result of independent research and work, this couldn't be possible without J-D-K's [JKSM](https://github.com/J-D-K/JKSM), which is an incredible piece of software and you all should be using it. Best regards JK, hope you're fine. \ No newline at end of file +Even though this is the result of independent research and work, this couldn't be possible without J-D-K's [JKSM](https://github.com/J-D-K/JKSM), which is an incredible piece of software and you all should be using it. Best regards JK, hope you're fine. + +TuxSH for [TWLSaveTool](https://github.com/TuxSH/TWLSaveTool), from which the code has been ripped. \ No newline at end of file diff --git a/source/gui.cpp b/source/gui.cpp index 0e2dbd8..c8451b7 100644 --- a/source/gui.cpp +++ b/source/gui.cpp @@ -196,8 +196,8 @@ void Gui::draw(void) pp2d_draw_texture(getTextureId(k), getSelectorX(k) + 1, getSelectorY(k) + 1); if (!selectedEntries.empty() && std::find(selectedEntries.begin(), selectedEntries.end(), k) != selectedEntries.end()) { - pp2d_draw_rectangle(getSelectorX(k) + 28, getSelectorY(k) + 28, 16, 16, WHITE); - pp2d_draw_texture_blend(TEXTURE_CHECKBOX, getSelectorX(k) + 24, getSelectorY(k) + 24, RGBA8(51, 51, 51, 255)); + pp2d_draw_rectangle(getSelectorX(k) + 31, getSelectorY(k) + 31, 16, 16, WHITE); + pp2d_draw_texture_blend(TEXTURE_CHECKBOX, getSelectorX(k) + 27, getSelectorY(k) + 27, RGBA8(51, 51, 51, 255)); } } @@ -206,13 +206,13 @@ void Gui::draw(void) drawSelector(); } - static const float p1width = pp2d_get_text_width("\uE000 to enter target. \uE002 to toggle ", 0.47f, 0.47f); + static const float p1width = pp2d_get_text_width("\uE000 to enter target. \uE002 to ", 0.47f, 0.47f); static const float p2width = pp2d_get_text_width("extdata", 0.47f, 0.47f); - static const float p3width = pp2d_get_text_width(". \uE006 to move.", 0.47f, 0.47f); + static const float p3width = pp2d_get_text_width(". \uE006 to move. \uE003 to multiselect.", 0.47f, 0.47f); static const float border = (TOP_WIDTH - p1width - p2width - p3width) / 2; - pp2d_draw_text(border, 224, 0.47f, 0.47f, WHITE, "\uE000 to enter target. \uE002 to toggle "); + pp2d_draw_text(border, 224, 0.47f, 0.47f, WHITE, "\uE000 to enter target. \uE002 to "); pp2d_draw_text(border + p1width, 224, 0.47f, 0.47f, getMode() == MODE_SAVE ? WHITE : RED, "extdata"); - pp2d_draw_text(border + p1width + p2width, 224, 0.47f, 0.47f, WHITE, ". \uE006 to move."); + pp2d_draw_text(border + p1width + p2width, 224, 0.47f, 0.47f, WHITE, ". \uE006 to move. \uE003 to multiselect."); info.draw(); error.draw();