diff --git a/CMakeLists.txt b/CMakeLists.txt index b3844a6..8bf6a90 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,7 +6,7 @@ if (POLICY CMP0091) endif () project(System3 LANGUAGES CXX) -set(CMAKE_CXX_STANDARD 14) +set(CMAKE_CXX_STANDARD 17) # Generates a static library from pkg_check_modules() result function(add_static_library name pkg) @@ -192,7 +192,6 @@ target_sources(system3 PRIVATE src/fm/makofm.cpp src/fm/mako_ymfm.cpp src/sys/ags.cpp - src/sys/ags_bmp.cpp src/sys/ags_cursor.cpp src/sys/ags_draw.cpp src/sys/ags_gl3.cpp diff --git a/src/sys/ags.cpp b/src/sys/ags.cpp index 5dcb4a1..d131150 100644 --- a/src/sys/ags.cpp +++ b/src/sys/ags.cpp @@ -224,8 +224,7 @@ AGS::AGS(const Config& config, const GameId& game_id) : game_id(game_id) draw_menu = false; // CG表示 - set_cg_dest = false; - cg_dest_x = cg_dest_y = 0; + cg_dest = std::nullopt; get_palette = extract_palette = extract_cg = true; palette_bank = -1; diff --git a/src/sys/ags.h b/src/sys/ags.h index 8c93b47..3d3c138 100644 --- a/src/sys/ags.h +++ b/src/sys/ags.h @@ -11,6 +11,7 @@ #include #include #include +#include #include #include "common.h" #include "game_id.h" @@ -72,7 +73,6 @@ private: CG load_vsp2l(const std::vector& data, int transparent); // Little Vampire CG load_gl3(const std::vector& data, bool set_palette, int transparent); CG load_pms(int page, const std::vector& data, bool set_palette, int transparent); - void load_bmp(const char* file_name); // あゆみちゃん物語 フルカラー実写版 CG load_vsp(const std::vector& data, bool set_palette, int transparent); void draw_char(int dest, int dest_x, int dest_y, uint16 code, TTF_Font* font, uint8 color); @@ -199,9 +199,7 @@ public: bool draw_menu; // CG表示 - bool set_cg_dest; - int cg_dest_x; - int cg_dest_y; + std::optional cg_dest; bool get_palette; bool extract_palette; bool extract_cg; diff --git a/src/sys/ags_bmp.cpp b/src/sys/ags_bmp.cpp deleted file mode 100644 index 1900313..0000000 --- a/src/sys/ags_bmp.cpp +++ /dev/null @@ -1,25 +0,0 @@ -/* - ALICE SOFT SYSTEM 3 for Win32 - - [ AGS - bmp loader ] -*/ - -#include "ags.h" -#include "fileio.h" - -void AGS::load_bmp(const char* file_name) -{ - // ヘッダ取得 - int sx = 0, sy = 0; - - // Jコマンドの処理 - if(set_cg_dest) { - sx = cg_dest_x; - sy = cg_dest_y; - set_cg_dest = false; - } - - if(extract_cg) { - WARNING("not implemented"); - } -} diff --git a/src/sys/ags_cursor.cpp b/src/sys/ags_cursor.cpp index e125d9e..d3728e5 100644 --- a/src/sys/ags_cursor.cpp +++ b/src/sys/ags_cursor.cpp @@ -13,21 +13,15 @@ extern SDL_Renderer* g_renderer; void AGS::load_cursor(int page) { // カーソルCGをロードする - bool j_set = set_cg_dest; - int j_x = cg_dest_x; - int j_y = cg_dest_y; + auto j_backup = cg_dest; int dest = dest_screen; - set_cg_dest = true; - cg_dest_x = 0; - cg_dest_y = 0; + cg_dest = {0, 0}; dest_screen = 1; load_cg(page, -1); - set_cg_dest = j_set; - cg_dest_x = j_x; - cg_dest_y = j_y; + cg_dest = j_backup; dest_screen = dest; // フォントの生成 diff --git a/src/sys/ags_draw.cpp b/src/sys/ags_draw.cpp index d3cc560..157150e 100644 --- a/src/sys/ags_draw.cpp +++ b/src/sys/ags_draw.cpp @@ -34,9 +34,7 @@ void mosaic(SDL_Surface* sf) { void AGS::load_cg(int page, int transparent) { if (bmp_prefix) { - char file_name[16]; - snprintf(file_name, sizeof(file_name), "%s%03d.BMP", bmp_prefix, page); - load_bmp(file_name); + WARNING("not implemented"); return; } std::vector data = acg.load(page); @@ -93,6 +91,14 @@ void AGS::load_cg(int page, int transparent) } break; } + + // J command + if (cg_dest.has_value()) { + cg.x = cg_dest->x; + cg.y = cg_dest->y; + cg_dest = std::nullopt; + } + if (extract_cg && cg.surface()) { SDL_SetSurfacePalette(cg.surface(), screen_palette); if (censor_list.count(page)) { diff --git a/src/sys/ags_gl3.cpp b/src/sys/ags_gl3.cpp index 551ebc4..83cf2fb 100644 --- a/src/sys/ags_gl3.cpp +++ b/src/sys/ags_gl3.cpp @@ -17,13 +17,6 @@ CG AGS::load_gl3(const std::vector& data, bool set_palette, int transpa int height = data[0x34] | (data[0x35] << 8); uint8 base = 0; - // Jコマンドの処理 - if(set_cg_dest) { - sx = cg_dest_x >> 3; - sy = cg_dest_y; - set_cg_dest = false; - } - // Zコマンドの処理 if(palette_bank != -1) { base = (palette_bank & 0x0f) << 4; diff --git a/src/sys/ags_gm3.cpp b/src/sys/ags_gm3.cpp index 58c6e20..78c9d95 100644 --- a/src/sys/ags_gm3.cpp +++ b/src/sys/ags_gm3.cpp @@ -17,13 +17,6 @@ CG AGS::load_gm3(const std::vector& data, int transparent) int height = data[0x34] | (data[0x35] << 8); uint8 base = 0; - // Jコマンドの処理 - if(set_cg_dest) { - sx = cg_dest_x >> 3; - sy = cg_dest_y; - set_cg_dest = false; - } - // Zコマンドの処理 if(palette_bank != -1) { base = (palette_bank & 0x0f) << 4; diff --git a/src/sys/ags_pms.cpp b/src/sys/ags_pms.cpp index cff23ad..b2d061c 100644 --- a/src/sys/ags_pms.cpp +++ b/src/sys/ags_pms.cpp @@ -19,15 +19,6 @@ CG AGS::load_pms(int page, const std::vector& data, bool set_palette, i int height = ey - sy + 1; uint16_t mask = data[0xa] | (data[0xb] << 8); - // Jコマンドの処理 - if(set_cg_dest) { - sx = cg_dest_x; - sy = cg_dest_y; - ex = sx + width - 1; - ey = sy + height - 1; - set_cg_dest = false; - } - if(get_palette) { SDL_Color colors[256]; int p = 0x20; diff --git a/src/sys/ags_vsp.cpp b/src/sys/ags_vsp.cpp index be52499..695e14d 100644 --- a/src/sys/ags_vsp.cpp +++ b/src/sys/ags_vsp.cpp @@ -37,15 +37,6 @@ CG AGS::load_vsp(const std::vector& data, bool set_palette, int transpa int height = ey - sy; uint8 base = (data[9] & 0x0f) << 4; - // Jコマンドの処理 - if(set_cg_dest) { - sx = cg_dest_x >> 3; - sy = cg_dest_y; - ex = sx + width; - ey = sy + height; - set_cg_dest = false; - } - // Zコマンドの処理 if (game_id.is(GameId::AMBIVALENZ_FD) || game_id.is(GameId::AMBIVALENZ_CD)) { // Z 0,numを無視する diff --git a/src/sys/ags_vsp2l.cpp b/src/sys/ags_vsp2l.cpp index 48bd721..cb8eaba 100644 --- a/src/sys/ags_vsp2l.cpp +++ b/src/sys/ags_vsp2l.cpp @@ -18,15 +18,6 @@ CG AGS::load_vsp2l(const std::vector& data, int transparent) int height = ey - sy; uint8 base = 0;//(data[9] & 0x0f) << 4; - // Jコマンドの処理 - if(set_cg_dest) { - sx = cg_dest_x >> 3; - sy = cg_dest_y; - ex = sx + width; - ey = sy + height; - set_cg_dest = false; - } - // Zコマンドの処理 if(palette_bank != -1) { base = (palette_bank & 0x0f) << 4; diff --git a/src/sys/nact_sys3.cpp b/src/sys/nact_sys3.cpp index 2249643..6b0f106 100644 --- a/src/sys/nact_sys3.cpp +++ b/src/sys/nact_sys3.cpp @@ -374,9 +374,7 @@ void NACT_Sys3::cmd_j() TRACE("J %d,%d:", x, y); // x方向はカラム単位で切り捨て - ags->cg_dest_x = column ? x * 8 : x & 0xfff8; - ags->cg_dest_y = y; - ags->set_cg_dest = true; + ags->cg_dest = {column ? x * 8 : x & 0xfff8, y}; } void NACT_Sys3::cmd_k()