From 450fd42512bd25e687ed787f5c054a2636a08e8e Mon Sep 17 00:00:00 2001 From: Shadow15510 Date: Thu, 3 Jun 2021 15:48:38 +0200 Subject: [PATCH] Save system --- CMakeLists.txt | 1 + Plague.g1a | Bin 64768 -> 65024 bytes src/main.c | 11 +++++------ src/save.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++ src/save.h | 12 ++++++++++++ 5 files changed, 65 insertions(+), 6 deletions(-) create mode 100644 src/save.c create mode 100644 src/save.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 56e7d81..d6490c0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,6 +16,7 @@ set(SOURCES src/mutation_engine.c src/data.c src/epidemic_engine.c + src/save.c # ... ) # Shared assets, fx-9860G-only assets and fx-CG-50-only assets diff --git a/Plague.g1a b/Plague.g1a index 031f2e326960fbb2696eff12f2e9c54bb231736c..1672daa2d32e5efe3f58408fec724a212eb45f50 100644 GIT binary patch delta 5220 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 +#include +#include + +#include "save.h" + +// Name of the savefile +static const uint16_t *filename = u"\\\\fls0\\Plague.sav"; + + +void read_save(struct game *current_game) +{ + struct BFile_FileInfo fileInfo; + int fd, handle; + uint16_t foundpath[30]; + + int size = sizeof(current_game) + sizeof(current_game->grid.data); + const int data_size = sizeof(uint8_t) * current_game->grid.width * current_game->grid.height; + uint8_t *data = malloc(data_size); + + char checkfile = BFile_FindFirst(filename, &handle, foundpath, &fileInfo); + BFile_FindClose(handle); + + if (checkfile == -1) BFile_Create(filename, BFile_File, &size); + else + { + fd = BFile_Open(filename, BFile_ReadOnly); + BFile_Read(fd, current_game, sizeof(current_game), 0); + BFile_Read(fd, data, data_size, -1); + BFile_Close(fd); + current_game->grid.data = data; + } +} + + +void write_save(const struct game *current_game) +{ + // Open file + int fd = BFile_Open(filename, BFile_WriteOnly); + + // Write data + BFile_Write(fd, current_game, sizeof(current_game)); + BFile_Write(fd, current_game->grid.data, sizeof(current_game->grid.data)); + + // Close file + BFile_Close(fd); +} \ No newline at end of file diff --git a/src/save.h b/src/save.h new file mode 100644 index 0000000..f4dd4bc --- /dev/null +++ b/src/save.h @@ -0,0 +1,12 @@ +#ifndef _SAVE_H +#define _SAVE_H + +#include "core.h" + +// read_save : read or create a new save +void read_save(struct game *current_game); + +// write_save : write the savefile +void write_save(const struct game *current_game); + +#endif /* _SAVE_H */ \ No newline at end of file