diff --git a/src/common.h b/src/common.h index 70e2409..cbb460c 100644 --- a/src/common.h +++ b/src/common.h @@ -10,7 +10,6 @@ #define SYSTEM3_VERSION "1.4.0" #include -#include #include #include diff --git a/src/debugger/debug_info.cpp b/src/debugger/debug_info.cpp index c969996..e7605e7 100644 --- a/src/debugger/debug_info.cpp +++ b/src/debugger/debug_info.cpp @@ -1,6 +1,5 @@ #include "debugger/debug_info.h" #include -#include #include #include "fileio.h" diff --git a/src/debugger/debugger.cpp b/src/debugger/debugger.cpp index 758af8c..cbc6da1 100644 --- a/src/debugger/debugger.cpp +++ b/src/debugger/debugger.cpp @@ -1,6 +1,7 @@ #include "debugger/debugger.h" #include #include +#include #include "common.h" #include "nact.h" #include "debugger/frontend.h" diff --git a/src/fileio.h b/src/fileio.h index 248f388..4ffa1ad 100644 --- a/src/fileio.h +++ b/src/fileio.h @@ -33,10 +33,11 @@ public: static int stat_save(const char* filename, struct stat* buf); static std::unique_ptr open(const char *file_name, int mode); int seek(long offset, int whence) { return fseek(fp, offset, whence); } + long tell() { return ftell(fp); } bool read(void* buffer, size_t size) { return fread(buffer, size, 1, fp) == 1; } - bool write(void* buffer, size_t size) { + bool write(const void* buffer, size_t size) { return fwrite(buffer, size, 1, fp) == 1; } int getc() { return fgetc(fp); } diff --git a/src/fm/mako_ymfm.cpp b/src/fm/mako_ymfm.cpp index a0a5efc..8aaf8eb 100644 --- a/src/fm/mako_ymfm.cpp +++ b/src/fm/mako_ymfm.cpp @@ -1,5 +1,6 @@ #include "mako_ymfm.h" #include +#include const int OPNA_CLOCK = 3993600 * 2; diff --git a/src/sys/ags.cpp b/src/sys/ags.cpp index aae434a..fa6f76f 100644 --- a/src/sys/ags.cpp +++ b/src/sys/ags.cpp @@ -419,6 +419,93 @@ AGS::~AGS() SDL_DestroyTexture(sdlTexture); } +void AGS::load(FILEIO* fio) +{ + menu_font_size = fio->getw(); + text_font_size = fio->getw(); + palette_bank = fio->getw(); + if (!palette_bank) { + palette_bank = -1; + } + text_font_color = fio->getw(); + menu_font_color = fio->getw(); + menu_frame_color = fio->getw(); + menu_back_color = fio->getw(); + text_frame_color = fio->getw(); + text_back_color = fio->getw(); + for (int i = 0; i < 10; i++) { + menu_w[i].sx = fio->getw(); + menu_w[i].sy = fio->getw(); + menu_w[i].ex = fio->getw(); + menu_w[i].ey = fio->getw(); + menu_w[i].push = fio->getw() ? true : false; + menu_w[i].frame = fio->getw() ? true : false; + fio->getw(); + fio->getw(); + + if (menu_w[i].screen) { + SDL_FreeSurface(menu_w[i].screen); + } + menu_w[i].screen = NULL; + if (menu_w[i].window) { + SDL_FreeSurface(menu_w[i].window); + } + menu_w[i].window = NULL; + } + for (int i = 0; i < 10; i++) { + text_w[i].sx = fio->getw(); + text_w[i].sy = fio->getw(); + text_w[i].ex = fio->getw(); + text_w[i].ey = fio->getw(); + text_w[i].push = fio->getw() ? true : false; + text_w[i].frame = fio->getw() ? true : false; + fio->getw(); + fio->getw(); + + if (text_w[i].screen) { + SDL_FreeSurface(text_w[i].screen); + } + text_w[i].screen = NULL; + if (text_w[i].window) { + SDL_FreeSurface(text_w[i].window); + } + text_w[i].window = NULL; + } +} + +void AGS::save(FILEIO* fio) +{ + fio->putw(menu_font_size); + fio->putw(text_font_size); + fio->putw(palette_bank == -1 ? 0 : palette_bank); + fio->putw(text_font_color); + fio->putw(menu_font_color); + fio->putw(menu_frame_color); + fio->putw(menu_back_color); + fio->putw(text_frame_color); + fio->putw(text_back_color); + for (int i = 0; i < 10; i++) { + fio->putw(menu_w[i].sx); + fio->putw(menu_w[i].sy); + fio->putw(menu_w[i].ex); + fio->putw(menu_w[i].ey); + fio->putw(menu_w[i].push ? 1 : 0); + fio->putw(menu_w[i].frame ? 1 : 0); + fio->putw(0); + fio->putw(0); + } + for (int i = 0; i < 10; i++) { + fio->putw(text_w[i].sx); + fio->putw(text_w[i].sy); + fio->putw(text_w[i].ex); + fio->putw(text_w[i].ey); + fio->putw(text_w[i].push ? 1 : 0); + fio->putw(text_w[i].frame ? 1 : 0); + fio->putw(0); + fio->putw(0); + } +} + void AGS::set_cg_file(const char *file_name) { bmp_prefix = NULL; diff --git a/src/sys/ags.h b/src/sys/ags.h index 7dc049a..6f56184 100644 --- a/src/sys/ags.h +++ b/src/sys/ags.h @@ -23,6 +23,7 @@ inline uint32* surface_line(SDL_Surface* surface, int y) } struct Config; +class FILEIO; class AGS { @@ -80,6 +81,9 @@ public: AGS(const Config& config, const GameId& game_id); ~AGS(); + void load(FILEIO* fio); + void save(FILEIO* fio); + void update_screen(); void flush_screen(bool update); diff --git a/src/sys/nact.cpp b/src/sys/nact.cpp index 3c35e1d..ea63e44 100644 --- a/src/sys/nact.cpp +++ b/src/sys/nact.cpp @@ -4,6 +4,7 @@ [ NACT ] */ +#include #include #include #include @@ -562,56 +563,7 @@ bool NACT::load(int index) for (int i = 0; i < 512; i++) { var[i] = fio->getw(); } - ags->menu_font_size = fio->getw(); - ags->text_font_size = fio->getw(); - ags->palette_bank = fio->getw(); - if (!ags->palette_bank) { - ags->palette_bank = -1; - } - ags->text_font_color = fio->getw(); - ags->menu_font_color = fio->getw(); - ags->menu_frame_color = fio->getw(); - ags->menu_back_color = fio->getw(); - ags->text_frame_color = fio->getw(); - ags->text_back_color = fio->getw(); - for (int i = 0; i < 10; i++) { - ags->menu_w[i].sx = fio->getw(); - ags->menu_w[i].sy = fio->getw(); - ags->menu_w[i].ex = fio->getw(); - ags->menu_w[i].ey = fio->getw(); - ags->menu_w[i].push = fio->getw() ? true : false; - ags->menu_w[i].frame = fio->getw() ? true : false; - fio->getw(); - fio->getw(); - - if (ags->menu_w[i].screen) { - SDL_FreeSurface(ags->menu_w[i].screen); - } - ags->menu_w[i].screen = NULL; - if (ags->menu_w[i].window) { - SDL_FreeSurface(ags->menu_w[i].window); - } - ags->menu_w[i].window = NULL; - } - for (int i = 0; i < 10; i++) { - ags->text_w[i].sx = fio->getw(); - ags->text_w[i].sy = fio->getw(); - ags->text_w[i].ex = fio->getw(); - ags->text_w[i].ey = fio->getw(); - ags->text_w[i].push = fio->getw() ? true : false; - ags->text_w[i].frame = fio->getw() ? true : false; - fio->getw(); - fio->getw(); - - if (ags->text_w[i].screen) { - SDL_FreeSurface(ags->text_w[i].screen); - } - ags->text_w[i].screen = NULL; - if (ags->text_w[i].window) { - SDL_FreeSurface(ags->text_w[i].window); - } - ags->text_w[i].window = NULL; - } + ags->load(fio.get()); for (int i = 0; i < 10; i++) { fio->read(tvar[i], 22); } @@ -633,16 +585,6 @@ bool NACT::load(int index) return true; } -#define FWRITE(data, size) { \ - memcpy(&buffer[p], data, size); \ - p += size; \ -} -#define FPUTW(data) { \ - uint16 tmp = (data); \ - buffer[p++] = tmp & 0xff; \ - buffer[p++] = (tmp >> 8) & 0xff; \ -} - bool NACT::save(int index, const char header[112]) { char file_name[_MAX_PATH]; @@ -652,65 +594,34 @@ bool NACT::save(int index, const char header[112]) if (!fio) return false; - uint8 buffer[9510]; - int p = 0; - - FWRITE(header, 112); - FPUTW(sco.page() + 1); - FPUTW(0); - FPUTW(0); // cg no? - FPUTW(0); - FPUTW(mako->current_music); - FPUTW(0); - FPUTW(sco.current_addr()); - FPUTW(0); + fio->write(header, 112); + fio->putw(sco.page() + 1); + fio->putw(0); + fio->putw(0); // cg no? + fio->putw(0); + fio->putw(mako->current_music); + fio->putw(0); + fio->putw(sco.current_addr()); + fio->putw(0); for (int i = 0; i < 512; i++) { - FPUTW(var[i]); + fio->putw(var[i]); } - FPUTW(ags->menu_font_size); - FPUTW(ags->text_font_size); - FPUTW(ags->palette_bank == -1 ? 0 : ags->palette_bank); - FPUTW(ags->text_font_color); - FPUTW(ags->menu_font_color); - FPUTW(ags->menu_frame_color); - FPUTW(ags->menu_back_color); - FPUTW(ags->text_frame_color); - FPUTW(ags->text_back_color); + ags->save(fio.get()); for (int i = 0; i < 10; i++) { - FPUTW(ags->menu_w[i].sx); - FPUTW(ags->menu_w[i].sy); - FPUTW(ags->menu_w[i].ex); - FPUTW(ags->menu_w[i].ey); - FPUTW(ags->menu_w[i].push ? 1 : 0); - FPUTW(ags->menu_w[i].frame ? 1 : 0); - FPUTW(0); - FPUTW(0); - } - for (int i = 0; i < 10; i++) { - FPUTW(ags->text_w[i].sx); - FPUTW(ags->text_w[i].sy); - FPUTW(ags->text_w[i].ex); - FPUTW(ags->text_w[i].ey); - FPUTW(ags->text_w[i].push ? 1 : 0); - FPUTW(ags->text_w[i].frame ? 1 : 0); - FPUTW(0); - FPUTW(0); - } - for (int i = 0; i < 10; i++) { - FWRITE(tvar[i], 22); + fio->write(tvar[i], 22); } for (int i = 0; i < 30; i++) { for (int j = 0; j < 10; j++) { - FWRITE(tvar_stack[i][j], 22); + fio->write(tvar_stack[i][j], 22); } } for (int i = 0; i < 30; i++) { for (int j = 0; j < 20; j++) { - FPUTW(var_stack[i][j]); + fio->putw(var_stack[i][j]); } } - fio->write(buffer, 9510); + assert(fio->tell() == 9510); return true; }