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 b08c65c..005d3ac 100644 Binary files a/savegame_manager.odt and b/savegame_manager.odt differ 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