From 8bd9035394c558e0ee6301e0baaed54475db6066 Mon Sep 17 00:00:00 2001 From: msiewert76 Date: Sat, 11 Jun 2011 16:29:15 +0000 Subject: [PATCH] - Update instruction file again, I'd say it is no longer a WIP now. - Add "debug" target. It is still somewhat shaky, you need to "make clean" before "make debug", and it does not do much besides writing a few debug lines during the boot sequence. - Add a hard coded version number which is no longer a part of the strings file (and does not need to be translated). - Using a Cyclops iEvolution no longer triggers Slot 2 mode. - Fix doing multiple things in FTP mode without having to restart. --- Changelog.txt | 9 ++- Makefile | 15 +++++ arm7/Makefile.debug | 133 +++++++++++++++++++++++++++++++++++++++ arm9/Makefile.debug | 127 +++++++++++++++++++++++++++++++++++++ arm9/source/display.cpp | 11 +++- arm9/source/display.h | 7 ++- arm9/source/ftplib.c | 4 +- arm9/source/globals.cpp | 1 + arm9/source/globals.h | 5 ++ arm9/source/hardware.cpp | 103 +++++++++++++----------------- arm9/source/main.cpp | 16 +++-- arm9/source/strings.cpp | 2 +- lang/sgm_german.ini | 2 +- lang/template.ini | 2 +- savegame_manager.odt | Bin 27704 -> 26385 bytes savegame_manager.pnproj | 2 +- savegame_manager.pnps | 2 +- 17 files changed, 364 insertions(+), 77 deletions(-) create mode 100644 arm7/Makefile.debug create mode 100644 arm9/Makefile.debug diff --git a/Changelog.txt b/Changelog.txt index 1d888d7..39aac46 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -37,7 +37,14 @@ Version 0.2.4 (4-10-2011) - Program now makes use of lower screen for most messages, which allows longer, more detailled messages. - Adds a Readme file/Manual to the program. -Version 0.2.5 (5-??-2011) +Version 0.3 (6-10-2011) + +This is the first non-beta release. - Adds the ability to translate most parts of the user interface. +- Adds Slot 2 backup mode (you will need a Slot 2 flash card; anything that has a DLDI driver should be supported). +- Enables FTP restore mode for saves bigger than the memory buffer (usually 2 MB). +- Fixes FTP mode so that multiple transactions are possible without restarting. - Various stability fixes. +- Many behind-the scenes improvements aimed to simplify further hacking. +- Instruction file is no longer beta. diff --git a/Makefile b/Makefile index 07a9c1a..6d48766 100644 --- a/Makefile +++ b/Makefile @@ -18,6 +18,8 @@ export TOPDIR := $(CURDIR) #--------------------------------------------------------------------------------- all: $(TARGET).nds +debug: $(TARGET)-debug.nds + #--------------------------------------------------------------------------------- $(TARGET).nds : arm7/$(TARGET).elf arm9/$(TARGET).elf ndstool -c $(TARGET).nds -7 arm7/$(TARGET).elf -9 arm9/$(TARGET).elf @@ -30,8 +32,21 @@ arm7/$(TARGET).elf: arm9/$(TARGET).elf: $(MAKE) -C arm9 +#--------------------------------------------------------------------------------- +$(TARGET)-debug.nds : arm7/$(TARGET)-debug.elf arm9/$(TARGET)-debug.elf + ndstool -c $(TARGET)-debug.nds -7 arm7/$(TARGET)-debug.elf -9 arm9/$(TARGET)-debug.elf + +#--------------------------------------------------------------------------------- +arm7/$(TARGET)-debug.elf: + $(MAKE) -C arm7 -f Makefile.debug + +#--------------------------------------------------------------------------------- +arm9/$(TARGET)-debug.elf: + $(MAKE) -C arm9 -f Makefile.debug + #--------------------------------------------------------------------------------- clean: $(MAKE) -C arm9 clean $(MAKE) -C arm7 clean rm -f $(TARGET).nds $(TARGET).arm7 $(TARGET).arm9 + rm -f $(TARGET)-debug.nds $(TARGET)-debug.arm7 $(TARGET)-debug.arm9 diff --git a/arm7/Makefile.debug b/arm7/Makefile.debug new file mode 100644 index 0000000..e39ca7d --- /dev/null +++ b/arm7/Makefile.debug @@ -0,0 +1,133 @@ +#--------------------------------------------------------------------------------- +.SUFFIXES: +#--------------------------------------------------------------------------------- +ifeq ($(strip $(DEVKITARM)),) +$(error "Please set DEVKITARM in your environment. export DEVKITARM=devkitARM") +endif + +include $(DEVKITARM)/ds_rules + +#--------------------------------------------------------------------------------- +# BUILD is the directory where object files & intermediate files will be placed +# SOURCES is a list of directories containing source code +# INCLUDES is a list of directories containing extra header files +# DATA is a list of directories containing binary files +# all directories are relative to this makefile +#--------------------------------------------------------------------------------- +BUILD := build +SOURCES := source +INCLUDES := include build +DATA := + +#--------------------------------------------------------------------------------- +# options for code generation +#--------------------------------------------------------------------------------- +ARCH := -mthumb-interwork + +CFLAGS := -g -Wall -O2\ + -mcpu=arm7tdmi -mtune=arm7tdmi -fomit-frame-pointer\ + -ffast-math \ + $(ARCH) + +CFLAGS += $(INCLUDE) -DARM7 -DDEBUG +CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions -fno-rtti + + +ASFLAGS := -g $(ARCH) +LDFLAGS = -specs=ds_arm7.specs -g $(ARCH) -Wl,-Map,$(notdir $*).map + +LIBS := -ldswifi7 -lmm7 -lnds7 + +#--------------------------------------------------------------------------------- +# list of directories containing libraries, this must be the top level containing +# include and lib +#--------------------------------------------------------------------------------- +LIBDIRS := $(LIBNDS) + + +#--------------------------------------------------------------------------------- +# no real need to edit anything past this point unless you need to add additional +# rules for different file extensions +#--------------------------------------------------------------------------------- +ifneq ($(BUILD),$(notdir $(CURDIR))) +#--------------------------------------------------------------------------------- + +export ARM7ELF := $(CURDIR)/$(TARGET)-debug.elf +export DEPSDIR := $(CURDIR)/$(BUILD) + +export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) + +CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) +CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) +SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) +BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) + +export OFILES := $(addsuffix .o,$(BINFILES)) \ + $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o) + +export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ + $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ + -I$(CURDIR)/$(BUILD) + +export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) + +#--------------------------------------------------------------------------------- +# use CXX for linking C++ projects, CC for standard C +#--------------------------------------------------------------------------------- +ifeq ($(strip $(CPPFILES)),) +#--------------------------------------------------------------------------------- + export LD := $(CC) +#--------------------------------------------------------------------------------- +else +#--------------------------------------------------------------------------------- + export LD := $(CXX) +#--------------------------------------------------------------------------------- +endif +#--------------------------------------------------------------------------------- + +.PHONY: $(BUILD) debug clean + +#--------------------------------------------------------------------------------- +$(BUILD): + @[ -d $@ ] || mkdir -p $@ + @make --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile.debug + +#--------------------------------------------------------------------------------- +debug: $(BUILD) + +#--------------------------------------------------------------------------------- +clean: + @echo clean ... + @rm -fr $(BUILD) *.elf + + +#--------------------------------------------------------------------------------- +else + +DEPENDS := $(OFILES:.o=.d) + +#--------------------------------------------------------------------------------- +# main targets +#--------------------------------------------------------------------------------- +$(ARM7ELF) : $(OFILES) + @echo linking $(notdir $@) + @$(LD) $(LDFLAGS) $(OFILES) $(LIBPATHS) $(LIBS) -o $@ +#--------------------------------------------------------------------------------- +$(ARM7ELF-D) : $(OFILES) + @echo linking $(notdir $@) + @$(LD) $(LDFLAGS) $(OFILES) $(LIBPATHS) $(LIBS) -o $@ + + +#--------------------------------------------------------------------------------- +# you need a rule like this for each extension you use as binary data +#--------------------------------------------------------------------------------- +%.bin.o : %.bin +#--------------------------------------------------------------------------------- + @echo $(notdir $<) + @$(bin2o) + +-include $(DEPENDS) + +#--------------------------------------------------------------------------------------- +endif +#--------------------------------------------------------------------------------------- diff --git a/arm9/Makefile.debug b/arm9/Makefile.debug new file mode 100644 index 0000000..ff89461 --- /dev/null +++ b/arm9/Makefile.debug @@ -0,0 +1,127 @@ +#--------------------------------------------------------------------------------- +.SUFFIXES: +#--------------------------------------------------------------------------------- +ifeq ($(strip $(DEVKITARM)),) +$(error "Please set DEVKITARM in your environment. export DEVKITARM=devkitARM") +endif + +include $(DEVKITARM)/ds_rules + +#--------------------------------------------------------------------------------- +# BUILD is the directory where object files & intermediate files will be placed +# SOURCES is a list of directories containing source code +# INCLUDES is a list of directories containing extra header files +# DATA is a list of directories containing binary files +# all directories are relative to this makefile +#--------------------------------------------------------------------------------- +BUILD := build +SOURCES := source +INCLUDES := include +DATA := + + +#--------------------------------------------------------------------------------- +# options for code generation +#--------------------------------------------------------------------------------- +ARCH := -mthumb -mthumb-interwork + +CFLAGS := -g -Wall -O2\ + -march=armv5te -mtune=arm946e-s -fomit-frame-pointer\ + -ffast-math \ + $(ARCH) + +CFLAGS += $(INCLUDE) -DARM9 -DDEBUG +CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions + +ASFLAGS := -g $(ARCH) -march=armv5te -mtune=arm946e-s + +LDFLAGS = -specs=ds_arm9.specs -g $(ARCH) -Wl,-Map,$(notdir $*.map) + +#--------------------------------------------------------------------------------- +# any extra libraries we wish to link with the project +#--------------------------------------------------------------------------------- +LIBS := -lfat -ldswifi9 -lnds9 + +#--------------------------------------------------------------------------------- +# list of directories containing libraries, this must be the top level containing +# include and lib +#--------------------------------------------------------------------------------- +LIBDIRS := $(LIBNDS) + +#--------------------------------------------------------------------------------- +# no real need to edit anything past this point unless you need to add additional +# rules for different file extensions +#--------------------------------------------------------------------------------- +ifneq ($(BUILD),$(notdir $(CURDIR))) +#--------------------------------------------------------------------------------- + +export ARM9ELF := $(CURDIR)/$(TARGET)-debug.elf +export DEPSDIR := $(CURDIR)/$(BUILD) + +export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ + $(foreach dir,$(DATA),$(CURDIR)/$(dir)) + +CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) +CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) +SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) +BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) + +#--------------------------------------------------------------------------------- +# use CXX for linking C++ projects, CC for standard C +#--------------------------------------------------------------------------------- +ifeq ($(strip $(CPPFILES)),) +#--------------------------------------------------------------------------------- + export LD := $(CC) +#--------------------------------------------------------------------------------- +else +#--------------------------------------------------------------------------------- + export LD := $(CXX) +#--------------------------------------------------------------------------------- +endif +#--------------------------------------------------------------------------------- + +export OFILES := $(addsuffix .o,$(BINFILES)) \ + $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o) + +export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ + $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ + -I$(CURDIR)/$(BUILD) + +export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) + +.PHONY: $(BUILD) debug clean + +#--------------------------------------------------------------------------------- +$(BUILD): + @[ -d $@ ] || mkdir -p $@ + @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile.debug + +#--------------------------------------------------------------------------------- +clean: + @echo clean ... + @rm -fr $(BUILD) *.elf *.nds* *.bin + + +#--------------------------------------------------------------------------------- +else + +#--------------------------------------------------------------------------------- +# main targets +#--------------------------------------------------------------------------------- +$(ARM9ELF) : $(OFILES) + @echo linking $(notdir $@) + @$(LD) $(LDFLAGS) $(OFILES) $(LIBPATHS) $(LIBS) -o $@ + +#--------------------------------------------------------------------------------- +# you need a rule like this for each extension you use as binary data +#--------------------------------------------------------------------------------- +%.bin.o : %.bin +#--------------------------------------------------------------------------------- + @echo $(notdir $<) + @$(bin2o) + +-include $(DEPSDIR)/*.d + +#--------------------------------------------------------------------------------------- +endif +#--------------------------------------------------------------------------------------- diff --git a/arm9/source/display.cpp b/arm9/source/display.cpp index 684c05b..0ecc2ef 100644 --- a/arm9/source/display.cpp +++ b/arm9/source/display.cpp @@ -57,13 +57,13 @@ void displayInit() void displayTitle() { - displayMessageF(STR_TITLE_MSG); + displayMessageF(STR_TITLE_MSG, VERSION_MAJOR, VERSION_MINOR, VERSION_MICRO); displayStateF(STR_STR, "Press (B) to continue"); while (!(keysCurrent() & KEY_B)); } -void displayPrintUpper() +void displayPrintUpper(bool fc) { bool gba = (mode == 1); u32 dstype = (mode == 3) ? 1 : 0; @@ -97,8 +97,13 @@ void displayPrintUpper() // fetch cartridge header (maybe, calling "cardReadHeader" on a FC messes with libfat!) sNDSHeader nds; - if (slot_1_type != AUXSPI_FLASH_CARD) + // The CycloDS iEvolution detects asd a game, probably to cheat Nintendos firmware. + // I might be able to fix this, to add autodetection, but I have decided against this, + // since the same method would also offer Nintendo a way to lock out this card! + if (!fc && (slot_1_type != AUXSPI_FLASH_CARD)) cardReadHeader((uint8*)&nds); + else + slot_1_type = AUXSPI_FLASH_CARD; char name[MAXPATHLEN]; // 0) print the mode diff --git a/arm9/source/display.h b/arm9/source/display.h index 6729539..48b1b33 100644 --- a/arm9/source/display.h +++ b/arm9/source/display.h @@ -25,7 +25,8 @@ #ifndef SAVE_DISPLAY_H #define SAVE_DISPLAY_H - + +#include #include #include @@ -37,7 +38,9 @@ extern PrintConsole lowerScreen; void displayInit(); void displayTitle(); -void displayPrintUpper(); +// Set "first" to true to tell the program that it has just booted, before anything was swapped. +// This is a workaround for the Cyclops iEvolution, and an attempt to prevent +void displayPrintUpper(bool fc = false); void displayPrintLower(); void displayMessageF(int id, ...); diff --git a/arm9/source/ftplib.c b/arm9/source/ftplib.c index 8022458..f3a827b 100644 --- a/arm9/source/ftplib.c +++ b/arm9/source/ftplib.c @@ -74,7 +74,7 @@ #define FTPLIB_DEFMODE FTPLIB_PASSIVE #endif -#include "display.h" +//#include "display.h" //#define perror iprintf #define perror // @@ -424,7 +424,7 @@ GLOBALDEF int FtpConnect(const char *host, netbuf **nControl) sin.sin_port = pse->s_port; } */ - u32 v[5]; + int v[5]; sscanf(host,"%u.%u.%u.%u:%u",&v[1],&v[2],&v[3],&v[4],&v[0]); sin.sin_port = htons(v[0]); sin.sin_addr.s_addr = (v[1] << 0) + (v[2] << 8) + (v[3] << 16) + (v[4] << 24); diff --git a/arm9/source/globals.cpp b/arm9/source/globals.cpp index 90c8d85..b163fe3 100644 --- a/arm9/source/globals.cpp +++ b/arm9/source/globals.cpp @@ -34,6 +34,7 @@ char ftp_ip[16] = "ftp_ip"; char ftp_user[64] = "ftp_user"; char ftp_pass[64] = "ftp_pass"; int ftp_port = 0; +bool ftp_active = false; int ir_delay = 1200; diff --git a/arm9/source/globals.h b/arm9/source/globals.h index eac3f52..c61a598 100644 --- a/arm9/source/globals.h +++ b/arm9/source/globals.h @@ -29,6 +29,10 @@ #include #include "auxspi.h" +#define VERSION_MAJOR 0 +#define VERSION_MINOR 3 +#define VERSION_MICRO 0 + extern u8 *data; extern u32 size_buf; @@ -38,6 +42,7 @@ extern char ftp_ip[16]; extern char ftp_user[64]; extern char ftp_pass[64]; extern int ftp_port; +extern bool ftp_active; extern int ir_delay; diff --git a/arm9/source/hardware.cpp b/arm9/source/hardware.cpp index 39c5e99..9edd065 100644 --- a/arm9/source/hardware.cpp +++ b/arm9/source/hardware.cpp @@ -119,7 +119,8 @@ bool hwDetectSlot2DLDI() // CycloDS (Slot 2) if (!strnicmp(io_dldi_data->friendlyName, "CycloDS", 7) - && strnicmp(io_dldi_data->friendlyName, "CycloDS Evolution", 17)) + && strnicmp(io_dldi_data->friendlyName, "CycloDS Evolution", 17) + && strnicmp(io_dldi_data->friendlyName, "CycloDS iEvolution", 18)) return true; // Ewin2 @@ -219,8 +220,11 @@ u32 hwDetect() // it does not support hotswapping the game. So we select this mode if there is *no* // flash card inserted in Slot 1. // - if (slot_1_type != 2) + // FIXME: This is currently broken due to the way the iEvolution works. + /* + if (slot_1_type != AUXSPI_FLASH_CARD) return 5; + */ // Nothing unique found, so enter WiFi mode return 0; @@ -608,11 +612,43 @@ void hwRestoreSlot2() } // ------------------------------------------------------------ +void hwLoginFTP(netbuf **buf) +{ + int j; + static int jmax = 10; + + displayMessage2F(STR_HW_FTP_SEEK_AP); + if (!Wifi_InitDefault(true)) { + displayWarning2F(STR_HW_FTP_ERR_AP); + while(1); + } + displayMessage2F(STR_HW_FTP_SEEK_FTP); + sprintf(txt, "%s:%i", ftp_ip, ftp_port); + j = 0; + while (!FtpConnect(txt, buf)) { + j++; + if (j >= jmax) { + displayWarning2F(STR_HW_FTP_ERR_FTP); + while(1); + } + swiDelay(10000); + } + displayMessage2F(STR_HW_FTP_LOGIN); + j = 0; + while (!FtpLogin(ftp_user, ftp_pass, *buf)) { + j++; + if (j >= jmax) { + displayWarning2F(STR_HW_FTP_ERR_LOGIN); + while(1); + } + swiDelay(10000); + } + ftp_active = true; +} + void hwBackupFTP(bool dlp) { netbuf *buf, *ndata; - int j; - static int jmax = 10; // Dump save and write it to FTP server // First: swap card @@ -628,32 +664,8 @@ void hwBackupFTP(bool dlp) size_blocks = 1 << (uint8(size) - 15); // Second: connect to FTP server - displayMessage2F(STR_HW_FTP_SEEK_AP); - if (!Wifi_InitDefault(true)) { - displayWarning2F(STR_HW_FTP_ERR_AP); - while(1); - } - displayMessage2F(STR_HW_FTP_SEEK_FTP); - sprintf(txt, "%s:%i", ftp_ip, ftp_port); - j = 0; - while (!FtpConnect(txt, &buf)) { - j++; - if (j >= jmax) { - displayWarning2F(STR_HW_FTP_ERR_FTP); - while(1); - } - swiDelay(10000); - } - displayMessage2F(STR_HW_FTP_LOGIN); - j = 0; - while (!FtpLogin(ftp_user, ftp_pass, buf)) { - j++; - if (j >= jmax) { - displayWarning2F(STR_HW_FTP_ERR_LOGIN); - while(1); - } - swiDelay(10000); - } + if (!ftp_active) + hwLoginFTP(&buf); char fdir[256] = ""; char fname[256] =""; @@ -785,38 +797,11 @@ bool hwRestoreFTPPartial(u32 ofs, u32 size, u32 type, netbuf *ndata) void hwRestoreFTP(bool dlp) { netbuf *buf, *ndata; - int j; - static int jmax = 10; // Dump save and write it to FTP server // First: connect to FTP server - displayMessage2F(STR_HW_FTP_SEEK_AP); - if (!Wifi_InitDefault(true)) { - displayWarning2F(STR_HW_FTP_ERR_AP); - while(1); - } - displayMessage2F(STR_HW_FTP_SEEK_FTP); - char fullname[512]; - sprintf(fullname, "%s:%i", ftp_ip, ftp_port); - j = 0; - while (!FtpConnect(fullname, &buf)) { - j++; - if (j >= jmax) { - displayWarning2F(STR_HW_FTP_ERR_FTP); - while(1); - } - swiDelay(10000); - } - displayMessage2F(STR_HW_FTP_LOGIN); - j = 0; - while (!FtpLogin(ftp_user, ftp_pass, buf)) { - j++; - if (j >= jmax) { - displayWarning2F(STR_HW_FTP_ERR_LOGIN); - while(1); - } - swiDelay(10000); - } + if (ftp_active) + hwLoginFTP(&buf); // Second: select a filename char fdir[256] = ""; diff --git a/arm9/source/main.cpp b/arm9/source/main.cpp index fbb6463..2828b1d 100644 --- a/arm9/source/main.cpp +++ b/arm9/source/main.cpp @@ -64,7 +64,7 @@ void mode_dsi() // use 3in1 to buffer data displayStateF(STR_EMPTY); - displayPrintUpper(); + displayPrintUpper(true); displayPrintLower(); // DSi mode, does nothing at the moment @@ -99,7 +99,7 @@ void mode_slot2() { // use slot2 DLDI device to store data displayStateF(STR_EMPTY); - displayPrintUpper(); + displayPrintUpper(true); displayPrintLower(); touchPosition touchXY; @@ -131,7 +131,7 @@ void mode_slot2() void mode_3in1() { - displayPrintUpper(); + displayPrintUpper(true); dsCardData data2; uint32 ime = hwGrab3in1(); @@ -185,7 +185,7 @@ void mode_gba() // use 3in1 to buffer data displayStateF(STR_EMPTY); gbatype = gbaGetSaveType(); - displayPrintUpper(); + displayPrintUpper(true); displayPrintLower(); touchPosition touchXY; @@ -217,7 +217,7 @@ void mode_wifi() { // use 3in1 to buffer data displayStateF(STR_EMPTY); - displayPrintUpper(); + displayPrintUpper(true); displayPrintLower(); touchPosition touchXY; @@ -410,7 +410,9 @@ int main(int argc, char* argv[]) iprintf("DLDI error"); while (1); } +#ifdef DEBUG iprintf("Found DLDI: %s\n", io_dldi_data->friendlyName); +#endif // detect hardware mode = hwDetect(); @@ -420,12 +422,16 @@ int main(int argc, char* argv[]) extra_id[i] = 0xff000000; extra_size[i] = 0; } +#ifdef DEBUG iprintf("Loading INI file\n"); +#endif if (has_argv(argc, argv)) loadIniFile(argv[0]); else loadIniFile(0); +#ifdef DEBUG iprintf("Done!\n"); +#endif if (slot2 > 0) mode = 4; diff --git a/arm9/source/strings.cpp b/arm9/source/strings.cpp index a89f1bb..0e7832f 100644 --- a/arm9/source/strings.cpp +++ b/arm9/source/strings.cpp @@ -62,7 +62,7 @@ bool stringsLoadFile(const char *fname) ADD_STRING(STR_STR, "%s"); // ADD_STRING(STR_MM_WIPE,"\n WIPES OUT ALL SAVE DATA\n ON YOUR GAME !"); - ADD_STRING(STR_TITLE_MSG,"DS savegame manager\nVersion 0.2.5 semi-stable\nBy Pokedoc"); + ADD_STRING(STR_TITLE_MSG,"DS savegame manager\nVersion 0.3.0\nBy Pokedoc"); ADD_STRING(STR_BOOT_NO_INI,"Unable to open ini file!\nPlease make sure that it is\n1. in this apps folder, or" "\n2. in the root folder\nIf 1. does not work, use 2."); ADD_STRING(STR_BOOT_MODE_UNSUPPORTED,"This mode is DISABLED.\nPlease restart the system."); diff --git a/lang/sgm_german.ini b/lang/sgm_german.ini index 6d2f348..58a2f5a 100644 --- a/lang/sgm_german.ini +++ b/lang/sgm_german.ini @@ -6,7 +6,7 @@ # The strings "0" and "1" should never be used; they are internal stuff for "empty" and "untranslated" strings. # 2-5: These are boot-time messages. -2=DS savegame manager\nVersion 0.2.5 semi-stable\nBy Pokedoc +2=DS savegame manager\nVersion %i.%i.%i\nVon Pokedoc # This is an error message appearing when the ini file can not be found. 3=Kann die ini-Datei nicht finden!\nBitte kopiere sie entweder\n1. in den selben Ordner wie die nds Datei, oder\n2. in das Hauptverzeichnis.\nWenn 1. nicht funktioniert, musst Du 2. verwenden # Thsis is an error message called when the system tries to enter a mode that is not supported yet (e.g. DSi mode) diff --git a/lang/template.ini b/lang/template.ini index c437d2b..00881c6 100644 --- a/lang/template.ini +++ b/lang/template.ini @@ -9,7 +9,7 @@ # 2-5: These are boot-time messages. # You do not need to translate 2 and 3, they only appear *before* this file is read. Since the format is frozen, I leave these slots in. -#2=DS savegame manager\nVersion 0.2.5 semi-stable\nBy Pokedoc +#2=DS savegame manager\nVersion %i.%i.%i\nBy Pokedoc # This is an error message appearing when the ini file can not be found. #3=Unable to open ini file!\nPlease make sure that it is\n1. in this apps folder, or\n2. in the root folder\nIf 1. does not work, use 2. # Thsis is an error message called when the system tries to enter a mode that is not supported yet (e.g. DSi mode) diff --git a/savegame_manager.odt b/savegame_manager.odt index b08c65c584e51835fa85d087682e3113b4bbc71f..005d3ac2700c9fccef7f7a01b8fc597a66be9217 100644 GIT binary patch delta 21118 zcmb5UW0W94(=OPyZQHiZY1_7@&1!SnHl}Tx)5f%?Ic?k4o%j9r?w-5*YvY`(tP>eo z6?w8U@Km&~fF@3ZA}Y&+Ltub_z<_`lm=7l+%7Opul7m1=lh3UXaQ|lr=08J1ApZ#L zKbL<*olI&?mpFm&U*RiI(!^J^|9c(_D8_&9r9rv>FCORr7E4|O{U5n2Q1<`wD8cyt z+na)s0oPW>#xUFF#>R# zL&MA|IhwKkQ%3Dy`=3?7!2Ca|{zuLK5d6Pp=H%#R;poQXgwDdekd}W#0$(h}8McnuI0G&hEXT6x|*EMeoJ$N&SAmYN&QV9pxi4a5yp$T=O&k$H>+6={=cT!HUG|6Jp}>f0?%UZ~;}%Pwi}# zZ)%^k54f{;(p^3ncjn2Tfxg=lRZ$F&*z$kcNXQF^r7kpBRmW|SOD-HoKspSM2pKGN z;%9H!bPE7hxbjptr=&{PGB`Sy=(|oGsqtNhF7}D$Dbx%crtlZryLv`X4%dBiMy{sa z1beKMdI@_&BJO9p+8CMDn-oWXwGygQrZRFHQnkfxF-MarU>a?M%Pk1{-0o+S0&%)C z!s~v9t83~icl%Ah(Q_$-c8Bc==L$Azx|jh#`iCvD=m;FGoi{Jp7g;;Wc< zb5P5ezCno-BIy3C;k*Mb#|CHa20g`XF>sc%rt*_!HPg&4<!>D|9BJ#kRW>EeD%(y1U~N>b74q{=xkUaDGro-52S zIDQoV156#D7ly=Ta=G7`Nu+~5^fi%90;Dzgi25UXjtpaNVciC=hjE&1fNJywCB>wU zBf!`Or&seGx8mCVN>?c+Q|PZ6$)jI#=5GM&bA0nU=qV`pTMxIZJ8aDz=f}HLdYEtL zVqD)}wcOeUf57zn3Kq|P>iu#njYDoAPWPWw$~Y`FKzV6fd7ZzeWZL6jyo zn&HA8N%%NKVeaK49`(%p@Ee}J&?@k=hUzU|_Ii(*%qvbz;0LI;z_`p3yRxA<)ZQcpr1*GA~+jEtkw&Aa#zOz<<2iB=YU2 zl5tBkpu5}OiMIeA!;8Gf6-tjSguT7J$9^w|!xd|zKxnvkpM4 zQ|dB}_rPqdlgO&%Nfu7eB7A4=iXKgI)&#!nT@xH_4b{2(4J1a`tx^e2%><@|L-yC& z*>Ui>xVfn|Z2b`37IDXrG`_hD`q|mB2fE`Q+aL|)VOD^$Ca$@KIXyq`n18JL$~Ag~ zmj_XST>g6(t#9d1$~b&94jnF>jS*ctL~!iWT9x=F*g zK@U6ykE`z*Qhpa=L$mlNu_4pvP)Z*67llhs`F4ZM2r|jwVq9^esQokgea3o-_CDau z`|a=?RQ2x}516nY9UhB8j+ za`F)KsAL)@45JXaBX`25F`gi>;9-2{0?Axj0OEv->JJ@9;SzF_j>P)y7Hy-Y2X! zmkg<2Cp^1G>vL#M_4G8bN%TVmjf(Ltc6q;iQ`e@Ax2DA>krN6kqR&&vE^n?5yIA*WV=>L{wU0GM1yp|Rl?D}p zgcSOVSfhQQzzd|gfQV!?0cuWsF#@Q)Pq?e+p;+2_<=8ro-_)qbuzS#cd|> zHE1!=y>?ahroZT{biz9^FoN!oTbvI43ySb6@Q45n()^HT!7-W(GEm=@yM_E%BqXjL z(-sZFw?9~rD+}aGTCVR89ry#RB%M4XFq-zwQdAt=->K-}I=hx5iZBE$D%`P!FkpyC zSsl}~z{IGy_ZlDnR#-he268V zH7>sV4*D;Zfzx$JA&>2y6H4--(o5_;A-@G;Oiyr#D0ZA25bPXe9t1>^=&*SUAnL2K zsm0z|+9lh=~_gAbGXTlF?}x2nl;7Z7*jH4h=T9dk*tx zrW$BSGkYpF5bu?F{NpXg)VW~u1X89-vSBBDemrWffyB-W)w@hO-la$eQrmQiB+o-q zgOO-P+_hMUG(R}kFGvg&W25!gnSSAg&OS*A9tnSSQ!SRM?HX<*UL!OZpnQQE5H{NU z$7}`h7i&FG0G8k_TWSiv;;;tCWvgqCxhc9vp%~WdjpL4hkhmL^%@~aF^NH~4fH&|a zr#u^rzkES$O>B*SFT9_JB?to+wzO;8JwuT-o3o=vi_1D0be?0SZ&MV)6xRGXW0>|m zqQQJ7!7FDAbn6s$Y~Se(Aa9n;G30s3Hp(sv@M)D|T+7NYRF*2~_M7&!_(@(5wu7>B zC_!CL+h$S1X&4rl=x-4r+(Q@~^pWZ_qdSPpKB)Cf1BWuA7K@>mG5 zAUa(;E*<40HNx)w5=lo#vbEgSAH zq@vH{0qZkejU+(>e36P;jrZH-qAoli`PixwYl3Y)60&|4_?F&~xD|j*%V;8UcW<5%b4R4C0Ua)z95eza|7kT zrXV89{^WE6KN)8S4Ibxjtex8#9eSpmR8C)7sj3HM7}f zoL{c3K)5$JEYvI+84-;Me`bN!4^rndlyKaK$i)qp{7{zx?WKYR;es%ZwqwHUg=vNB zUkg*9jTh4)o7;X5PTi~+QXzAQ-n1q!-C4f8QETkP?rkSyPRZP+z2G30RV+&1NzKUO20|Lqk za?S%GVtNU6(EM)Za5g32n_A}21NDcQwRXk#6DD`;_5OR{^*|Vzy2VrzoYz<;hw{}< zm`tDR5PGp-sfh;G^=p*V_VxDTzB)g5U&iSKe zJmI(O$JFQN<_yj39NuapoHlWjU4-23(rX5I$0^lv#_}wA9emD8&YyY)S<}&t8rTv3 zI^1)(etVMPjyEDz%BLW!Q7IHsmiwcE)u`y?6mRGVMAM_99`+21K@wz-QBI6CZy>rZ zeDhrNrx|_?P6A0; z^0#O_0Vqj8bwnCG%0F=&= zb=oi2gwa~i<3n4Zl2hgk4>OBLPj}*1r+ZXoL;QY8xnjX(bcm^^g9nCPQ(#xC=U^sf zeFPa|^?N9WFAsJ*v{`NedzwJOGSp%xkf6yI{Y2i)Afo%YwXv3T@e6MuBXE>A)qy zKT(IbKkMj>Ep9!XDPwFerr+UBX|uJ_W{if z#UYwfwvsD0__iZ2Dr*vC`_*%5^216p`7tp%EgO%Zp$u83=Bekccl}BqF}k7 z%K8Wv8*cV&H)3C+>W@Yk=1GqKio1O|{vnlzCoU>YLVdv1fIxw-^1?=)1b@cHT)sdu z1${bv@=!&*vMj5zNwY~l>o`jVN$NgiA?A4PZ=ASA)EozkaC;cj0T|Yg#|r61%;WX= z=eVMbrj8A7s8J>lx$E!5w{~p}b;XDTlwEu{huE1;f)727p@di3DZq;qnUoeQvJ|?+ zUdiKtq@qImeH;688ADIZadwEs$!lM5PX5AcMmP=)X$X{4H=D>Dy6Z;_=tzFj=4h*_ zSq^fvKkX*=z=}iyKrCT`Ks?j5x>Z{TNdJl=Q*CxT19%^f@*Nrmg~vxsZSHsX}OSg_~OHIlzm61{KqE`f); zAL9+FUx=}ELfnaP{<%5*i@-A4&eXF^=`->p=2KLH5!AmH9Dv`wvfY6G8xlW}JJvxI z^5YWK5~Q>o54v6TLOL!?#K>~y8`Tbk4&+6etV%I-A*jg_&6}F_!|~xTwXwYd?aRq- zafyx}#q0*#Op{m{M++4-3QE=^GPDxZs6WE~MIUXntkiD01B-Dofx)(wB>3A_grWkN zPpNWP`{XapOn`sy!kHjOwdMsrQQz?yDrUy*&_HxK5^|1sH}#n6h=|hdXz{9T-Nnso zJ9gTAFu$}-J2^Yr3fbz#xExkXk?3)^mYweDX0EVO2_!tn=vkwum6z-=m3AAU!2iH+ zFkM3R(=Dr%^=8HBuAUjM#`}FSQ#aCkAgAQ5ZFuN#4rnC4>{y%z#VC7=n-*7QBdn6Ls)y_T2lgbOkC90 zEihVg+p(X=wd_CSgEHuGu7Ox`zAv&~sE~N7P6+Xx&o3MZtFSaSCgu2HQ@?sT*8W`) zQ&Q2K7dZ2cMaSJV3`lA>kS1?ZD*YWVIYuG`RZWFr0(xrwNX=0c{^x|$XxfC59G1gvN!*Hu)vU>FedbDG3)$da;hvg)(o z=cLLNZO=*|ymqOhNtR1(oA4do!+XIfgal2XeKthJvdv{Zso`G_u`&ElSHGcsPv23V zc3}C-*U+)xj58YG)$R`G()Q!E^w)eCftrTE87up^M`AHr*WuTb$}<`YAhF^Z`_Y)X z08j@QUE~`QFwmwp(Su;3%i$L^7Yaz{LINJClj7SI9@SeBh z2y5*3N{IKD5z4W25+)wt-NHYB8+etW0?Sm!Q&~T|9jx1EDwU!1b zB;rQp3~Uh$cWN=s#@(J&uqV7hg!ZWXr=#KE6S|duuU_G7T5A_SpNHui1nqcF04C#+ z{D+%?gSmp*u-?t+WbtSPVA1Z2-}pR|<_1_H6}Eo4hX)35>&on)5RxG$9q5Ctd({Pc zGRas({9xi|QO3qZfkP$dLx-CoJ7L`9+Wx^)Q@#lEdmG8dAjLm$xi3)g;-;{SMJW=d zZWD++X^k(=QW1>CEt3X*e$!5i<#maOQEb*U}DUTSKJ+?NJ<+5A98MSampJqDxR5QR;G^-ySncxSPG&;t4&>9^B@S&8OP#c ziy$}2K&2P6xvSgymD7HxHvAe2VQEw4CuO+!&DemP0By%Vh{vz}v9gOQ(H4;}u9Nc5 z9-%ED4UPYK!Oh|1yMlJm25>vKxI@N8M*RN)SU}{K<+#@_2G#kvqk2kFDb{1ppq!r5 zliem0z1&Y}RnAD-v~!E4NTL|GLEl59*kVh)r?t{{HPHSW6*?^Vjr@Xr6z;~YLE^PGu?fDx#&kfCaV6Xw z);%C7DSXN_KXmhzP-tH+Cq$4ncNjISi`!3U+n+SEbGBpLv@bc(A31%$VB8yZCG=ui z5W^RjW-q)~^gdS@n5c>VK6g!mNRp62Gq&1!l#u`{;>CURSh(w42r;2bRKrIMRKzrteT9kk`tlyTx*#) zOvc#7Kbv@c9BdP=HLZlGi0J7G=G82%qi1AuQH}#9=R-M!fQ{v#`((7>k2@D?ryr)G zc>PK0>~8`#Ot{fJ*$>E6IMz&Cl_6y5FHUu1tgC@cFxrgPL$CgPf59K{U<4ge#0w!# zZ<1t%;4;ZkYA83t8q0|9(dLz_EW&p_se-*BH6~tMM>-$N;Gcb_IkVrKVE_oG<-x5w zD&0lb1cym2K+?GrZEThoE-P}D)-I0>Lu8HnkIGMyOmK zUPH1ViG{^m_Z(5mkyafgvPY1dZjv4^+;0v0%~dw+Koc!eQ(wXz4fcQlju^GC99ei(#iw4QpM5F^yP+=%nVSNU z0GM%&JGrcAxGUUr&Rv8!l_W(P>tfo@Ny)Z%EfvAz3FHi!G;sxcKJubzYS3$5omx`k zY2{4?fN9pDH;#+La9|H+RI&`83KE6XC<0gK{0pO}Zs}5ZQYilfM3WfLKdYZQMhGL7 zJv)Tz)+%VG$(*!M<_77=IWclb7dzg|HUPT}M55wCFF%hn6*4hiw0E?*A)rWpcj%jx zWf-eOGpA-Wq@SQg&P!jPL#wBLQJ|ooJIQr7ptdis$2bVLa@*osWdX-imvRZS&M6l( z7==PjsW#_6NdHpeM%R@pE#D&6I>PsT*X3YRk#+}UvI6myN%SAa`g`2&4b0IW6Vdb- zXS#uuQY3?oTUs)R0SxRgdf~kuze4NjLFJruaC}aEl~-KXTt{A3)SZZ0|HeA7{o29_ zm{(gXCz7Hyd!3XGGvR45O~OQ0LG z#bZ~efODxEX#7ZDALibxf%!1kU6I%Xz{Jm7b)2Yw(J<4@Oo*G^&^SvOU?il0uvi#0 z?`T$@itq|C|5B#8KM|NTup~t|JLBY4$>_x$H_%;_VuD3@0vFmuBBC?gZ(V=H!^R%w zlWsFID7)fNcjW?re!-SL1LUXrsd9SG3Z)wujm61gc8P~tP;iqG? zDse=^(X!LB7D<361b=@DzBw(8^$#Xl6WU&5jatXxzZzuoOk*y-(YVkrva(}Ru%xX2 zdTdLF4j}e>A2g~At+;*iQg43*^ybg}M>o1irdNmdYOXu(Aym3>6vXa|5TaOeE4sF` zD{m~TIu*NDT1GN#B$Of3$6D6tF_q4(XE9~O;gt44V(@>+8~dIM(ruFeHZ{Wy!n>3u4|gAM*K~wUm`iV{D*JC4{-h(>%KWyWW#pKkwBWSQ zr50GT-}fBJhNZd6r7+w?g<9M2lI<5uMslK8k_?3NWrCkoyCs!Ho0*uFxAl7U>fG0E zK>OP%REsph-^3k`(ukZ7w6ys(FVEol@2$a}UWmEW=EZs4vzdiX;3%SGT!hUWl$Xl>z)>?Ox$M4_@NVyawf3 z$*_dvb!JQrq2+6aliiOuAkD@(MA>U)5^wyt<@34nDX5Lm@i`el_qQV3J}w$-{O3x? z^3#Vu&{TcxY<}(PJrs ztBoORq2`a5cv7f|5gCazV)ui7Lyjv;p<#Jx6T$0Zb#JjHqB!m`l*6EIt1x%EpB>|? z`?OBNkk*^qH45u*By1&t400EX9;-k?9s^`dddJ}3hOTXZ>aZ3jp;`17 zcRN`%cI~T@%F=?85l)4f-N&0g|6?$7VGVpIYiQj(#FCMthsM3GhQEi|TeYUqR75vp4el+Kl z@sHEzvHmj{+ar49ahkB89&nRT6S9t&=j}~4VHaSQ;shH@IV?hFw-&!AYpIET>}^A& zN9f~jiCg^hB{X2Mh>GQHv?jNb+8PeR9pw_ZVaV>pkF{MGU5iQA{h9p%vX2oTkYQ%7 zEU>v3W;`h_hkw~Yl+wMYAIQN;p(Isos@HM;arD&r(pih}U3tGHl^De&Q%Tc&EH$YJ z6t|r72MpEVyYoaXOi-OWFSFS6A|54m3ivLXlYTSyvKq}YNmA*>`eVQ2yB_Hn1&#oa zCj%o})t6Oy{F9!{p$AQGD+=VVE8hcViPVuPU1$p7S+EmIF3mt4jz;cVwwrkHHyTEX zp1GbQ;b7P4E;dH$^@in)p8K~WD{7<9mRi0bnvxw!_l;X`G=9}3iJgW zJUF-aHUAD*)9Q6hLH~RGm$kRpIJa9y&Zj!t-tL{}T}

&RPnhTJqrcdgX!V@uUdx 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 NC@>dZfWvRo{{RI~5q|&x diff --git a/savegame_manager.pnproj b/savegame_manager.pnproj index e1b95fd..13affe7 100644 --- a/savegame_manager.pnproj +++ b/savegame_manager.pnproj @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/savegame_manager.pnps b/savegame_manager.pnps index 6edac41..967e1ca 100644 --- a/savegame_manager.pnps +++ b/savegame_manager.pnps @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file