From 406a7fe106ef64fda0b1f20370c7b8bedd782331 Mon Sep 17 00:00:00 2001 From: kichikuou Date: Thu, 21 May 2020 23:24:54 +0900 Subject: [PATCH 01/14] Merge upstream changes: output_console() takes printf-style arguments --- src/linux/nact_linux.cpp | 8 +- src/sys/nact.cpp | 5 - src/sys/nact.h | 2 +- src/sys/nact_sys1.cpp | 144 +++++-------------------- src/sys/nact_sys2.cpp | 216 +++++++------------------------------ src/sys/nact_sys3.cpp | 222 +++++++-------------------------------- src/win/nact_win.cpp | 8 +- 7 files changed, 110 insertions(+), 495 deletions(-) diff --git a/src/linux/nact_linux.cpp b/src/linux/nact_linux.cpp index 56c2b22..9367d02 100644 --- a/src/linux/nact_linux.cpp +++ b/src/linux/nact_linux.cpp @@ -35,9 +35,13 @@ void NACT::release_console() { } -void NACT::output_console(char log[]) +void NACT::output_console(const char *format, ...) { #if defined(_DEBUG_CONSOLE) - fputs(log, stderr); + va_list ap; + + va_start(ap, format); + vfprintf(stdout, format, ap); + va_end(ap); #endif } diff --git a/src/sys/nact.cpp b/src/sys/nact.cpp index c08ca75..2675169 100644 --- a/src/sys/nact.cpp +++ b/src/sys/nact.cpp @@ -315,9 +315,7 @@ void NACT::execute(T* impl) } } -#if defined(_DEBUG_CONSOLE) output_console(string); -#endif } else if((0x81 <= cmd && cmd <= 0x9f) || 0xe0 <= cmd) { // message (2 bytes) char string[3]; @@ -345,10 +343,7 @@ void NACT::execute(T* impl) SDL_Delay(16); } } - -#if defined(_DEBUG_CONSOLE) output_console(string); -#endif } else { fatal("Unknown command %2x at %d", cmd, scenario_addr); } diff --git a/src/sys/nact.h b/src/sys/nact.h index af478c9..aa92a35 100644 --- a/src/sys/nact.h +++ b/src/sys/nact.h @@ -206,7 +206,7 @@ public: int tvar_index, tvar_maxlen; // デバッグログ - void output_console(char log[]); + void output_console(const char *format, ...); int get_scenario_page() const { return scenario_page; } diff --git a/src/sys/nact_sys1.cpp b/src/sys/nact_sys1.cpp index 80720cb..34766cd 100644 --- a/src/sys/nact_sys1.cpp +++ b/src/sys/nact_sys1.cpp @@ -117,11 +117,7 @@ void NACT_Sys1::cmd_calc() } var[index] = cali(); -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\n!var[%d]:%d!", index, var[index]); - output_console(log); -#endif + output_console("\n!var[%d]:%d!", index, var[index]); } void NACT_Sys1::cmd_branch() @@ -219,11 +215,7 @@ void NACT_Sys1::cmd_branch() } } -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\n{%d:", condition); - output_console(log); -#endif + output_console("\n{%d:", condition); } void NACT_Sys1::cmd_label_jump() @@ -231,22 +223,14 @@ void NACT_Sys1::cmd_label_jump() int next_addr = getw(); scenario_addr = next_addr; -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\n@%x:", next_addr); - output_console(log); -#endif + output_console("\n@%x:", next_addr); } void NACT_Sys1::cmd_label_call() { int next_addr = getw(); -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\n\\%x:", next_addr); - output_console(log); -#endif + output_console("\n\\%x:", next_addr); if(next_addr == 0) { // リターン @@ -268,22 +252,14 @@ void NACT_Sys1::cmd_page_jump() scenario_page = next_page; scenario_addr = 2; -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\n&%d:", next_page); - output_console(log); -#endif + output_console("\n&%d:", next_page); } void NACT_Sys1::cmd_page_call() { int next_page = cali(), next_addr; -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\n%%%d:", next_page); - output_console(log); -#endif + output_console("\n%%%d:", next_page); if(next_page == 0) { // リターン @@ -310,11 +286,7 @@ void NACT_Sys1::cmd_set_menu() ags->menu_dest_y += ags->menu_font_size + 2; ags->draw_menu = false; -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "$"); - output_console(log); -#endif + output_console("$"); } else { if(!menu_index) { ags->clear_menu_window(); @@ -325,21 +297,13 @@ void NACT_Sys1::cmd_set_menu() ags->menu_dest_y += 2; ags->draw_menu = true; -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\n$%x,", menu_addr[menu_index - 1]); - output_console(log); -#endif + output_console("\n$%x,", menu_addr[menu_index - 1]); } } void NACT_Sys1::cmd_open_menu() { -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\n]"); - output_console(log); -#endif + output_console("\n]"); if(!menu_index) { scenario_addr = scenario_data[0] | (scenario_data[1] << 8); @@ -455,11 +419,7 @@ void NACT_Sys1::cmd_set_verbobj() menu_obj[menu_index++] = obj; verb_obj = true; -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\n[%x,%s,%s:", addr, caption_verb[verb], caption_obj[obj]); - output_console(log); -#endif + output_console("\n[%x,%s,%s:", addr, caption_verb[verb], caption_obj[obj]); } void NACT_Sys1::cmd_set_verbobj2() @@ -476,21 +436,13 @@ void NACT_Sys1::cmd_set_verbobj2() } verb_obj = true; -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\n:%d,%x,%s,%s:", condition, addr, caption_verb[verb], caption_obj[obj]); - output_console(log); -#endif + output_console("\n:%d,%x,%s,%s:", condition, addr, caption_verb[verb], caption_obj[obj]); } void NACT_Sys1::cmd_open_verb() { // 動詞メニューの表示 -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nopen verb-obj menu"); - output_console(log); -#endif + output_console("\nopen verb-obj menu"); verb_obj = false; // 表示する動詞のチェック @@ -841,11 +793,7 @@ top2: void NACT_Sys1::cmd_a() { -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "A\n"); - output_console(log); -#endif + output_console("A\n"); if(!text_skip_enb) { // Pushマークの表示 @@ -899,11 +847,7 @@ void NACT_Sys1::cmd_e() void NACT_Sys1::cmd_f() { -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nF"); - output_console(log); -#endif + output_console("\nF"); scenario_addr = 2; } @@ -912,11 +856,7 @@ void NACT_Sys1::cmd_g() { int page = getd(); -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nG %d:", page); - output_console(log); -#endif + output_console("\nG %d:", page); if (crc32 == CRC32_INTRUDER) { page = (page == 97) ? 96 : (page == 98) ? 97 : page; @@ -958,11 +898,7 @@ void NACT_Sys1::cmd_l() { int index = getd(); -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nL %d:", index); - output_console(log); -#endif + output_console("\nL %d:", index); if(1 <= index && index <= 26) { // ASLEEP_A.DAT - ASLEEP_Z.DAT @@ -1081,11 +1017,7 @@ void NACT_Sys1::cmd_p() ags->text_font_color = (uint8)((param & 0x7) + 16); -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nP %d:", param); - output_console(log); -#endif + output_console("\nP %d:", param); } #define FWRITE(data, size) { \ @@ -1112,11 +1044,7 @@ void NACT_Sys1::cmd_q() int index = getd(); -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nQ %d:", index); - output_console(log); -#endif + output_console("\nQ %d:", index); if(1 <= index && index <= 26) { // ASLEEP_A.DAT - ASLEEP_Z.DAT @@ -1193,11 +1121,7 @@ void NACT_Sys1::cmd_q() void NACT_Sys1::cmd_r() { -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "R\n"); - output_console(log); -#endif + output_console("R\n"); // ウィンドウの表示範囲外の場合は改ページ if(ags->return_text_line(text_window)) { @@ -1209,11 +1133,7 @@ void NACT_Sys1::cmd_s() { int page = getd(); -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nS %d:", page); - output_console(log); -#endif + output_console("\nS %d:", page); if(page) { mako->play_music(page); @@ -1232,11 +1152,7 @@ void NACT_Sys1::cmd_u() int page = getd(); int transparent = getd(); -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nU %d,%d:", page, transparent); - output_console(log); -#endif + output_console("\nU %d,%d:", page, transparent); if (crc32 == CRC32_INTRUDER) { ags->load_cg(page, 11); @@ -1263,11 +1179,7 @@ void NACT_Sys1::cmd_x() { int index = getd(); -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nX %d:", index); - output_console(log); -#endif + output_console("\nX %d:", index); if(1 <= index && index <= 10) { ags->draw_text(tvar[index - 1]); @@ -1279,11 +1191,7 @@ void NACT_Sys1::cmd_y() int cmd = cali(); int param = cali(); -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nY %d,%d:", cmd, param); - output_console(log); -#endif + output_console("\nY %d,%d:", cmd, param); switch (crc32) { case CRC32_BUNKASAI: @@ -1448,11 +1356,7 @@ void NACT_Sys1::cmd_z() int cmd = cali(); int param = cali(); -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nZ %d,%d:", cmd, param); - output_console(log); -#endif + output_console("\nZ %d,%d:", cmd, param); switch (crc32) { case CRC32_INTRUDER: diff --git a/src/sys/nact_sys2.cpp b/src/sys/nact_sys2.cpp index f6e024f..50ce7c8 100644 --- a/src/sys/nact_sys2.cpp +++ b/src/sys/nact_sys2.cpp @@ -70,11 +70,7 @@ void NACT_Sys2::cmd_calc() } var[index] = cali(); -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\n!var[%d]:%d!", index, var[index]); - output_console(log); -#endif + output_console("\n!var[%d]:%d!", index, var[index]); } void NACT_Sys2::cmd_branch() @@ -236,11 +232,7 @@ void NACT_Sys2::cmd_branch() } } -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\n{%d:", condition); - output_console(log); -#endif + output_console("\n{%d:", condition); } void NACT_Sys2::cmd_label_jump() @@ -248,22 +240,14 @@ void NACT_Sys2::cmd_label_jump() int next_addr = getw(); scenario_addr = next_addr; -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\n@%x:", next_addr); - output_console(log); -#endif + output_console("\n@%x:", next_addr); } void NACT_Sys2::cmd_label_call() { int next_addr = getw(); -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\n\\%x:", next_addr); - output_console(log); -#endif + output_console("\n\\%x:", next_addr); if(next_addr == 0) { // リターン @@ -285,22 +269,14 @@ void NACT_Sys2::cmd_page_jump() scenario_page = next_page; scenario_addr = 2; -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\n&%d:", next_page); - output_console(log); -#endif + output_console("\n&%d:", next_page); } void NACT_Sys2::cmd_page_call() { int next_page = cali(), next_addr; -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\n%%%d:", next_page); - output_console(log); -#endif + output_console("\n%%%d:", next_page); if(next_page == 0) { // リターン @@ -327,11 +303,7 @@ void NACT_Sys2::cmd_set_menu() ags->menu_dest_y += ags->menu_font_size + 2; ags->draw_menu = false; -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "$"); - output_console(log); -#endif + output_console("$"); } else { if(!menu_index) { ags->clear_menu_window(); @@ -342,21 +314,13 @@ void NACT_Sys2::cmd_set_menu() ags->menu_dest_y += 2; ags->draw_menu = true; -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\n$%x,", menu_addr[menu_index - 1]); - output_console(log); -#endif + output_console("\n$%x,", menu_addr[menu_index - 1]); } } void NACT_Sys2::cmd_open_menu() { -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\n]"); - output_console(log); -#endif + output_console("\n]"); if(!menu_index) { scenario_addr = scenario_data[0] | (scenario_data[1] << 8); @@ -468,11 +432,7 @@ void NACT_Sys2::cmd_set_verbobj() menu_obj[menu_index++] = obj; verb_obj = true; -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\n[%x,%s,%s:", addr, caption_verb[verb], caption_obj[obj]); - output_console(log); -#endif + output_console("\n[%x,%s,%s:", addr, caption_verb[verb], caption_obj[obj]); } void NACT_Sys2::cmd_set_verbobj2() @@ -489,21 +449,13 @@ void NACT_Sys2::cmd_set_verbobj2() } verb_obj = true; -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\n:%d,%x,%s,%s:", condition, addr, caption_verb[verb], caption_obj[obj]); - output_console(log); -#endif + output_console("\n:%d,%x,%s,%s:", condition, addr, caption_verb[verb], caption_obj[obj]); } void NACT_Sys2::cmd_open_verb() { // 動詞メニューの表示 -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nopen verb-obj menu"); - output_console(log); -#endif + output_console("\nopen verb-obj menu"); verb_obj = false; // 表示する動詞のチェック @@ -773,11 +725,7 @@ void NACT_Sys2::cmd_open_obj(int verb) void NACT_Sys2::cmd_a() { -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "A\n"); - output_console(log); -#endif + output_console("A\n"); if(!text_skip_enb) { // Pushマークの表示 @@ -821,11 +769,7 @@ void NACT_Sys2::cmd_b() int p4 = cali(); int p5 = cali(); -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nB %d,%d,%d,%d,%d,%d,%d:", cmd, index, p1, p2, p3, p4, p5); - output_console(log); -#endif + output_console("\nB %d,%d,%d,%d,%d,%d,%d:", cmd, index, p1, p2, p3, p4, p5); if(cmd == 1) { ags->menu_w[index - 1].sx = p1 * 8; @@ -889,11 +833,7 @@ void NACT_Sys2::cmd_d() int p7 = cali(); int p8 = cali(); -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nD %d,%d,%d,%d,%d,%d,%d,%d:", p1, p2, p3, p4, p5, p6, p7, p8); - output_console(log); -#endif + output_console("\nD %d,%d,%d,%d,%d,%d,%d,%d:", p1, p2, p3, p4, p5, p6, p7, p8); } void NACT_Sys2::cmd_e() @@ -902,20 +842,12 @@ void NACT_Sys2::cmd_e() int p2 = cali(); int p3 = cali(); -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nE %d,%d,%d:", p1, p2, p3); - output_console(log); -#endif + output_console("\nE %d,%d,%d:", p1, p2, p3); } void NACT_Sys2::cmd_f() { -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nF"); - output_console(log); -#endif + output_console("\nF"); scenario_addr = 2; } @@ -924,11 +856,7 @@ void NACT_Sys2::cmd_g() { int page = cali(); -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nG %d:", page); - output_console(log); -#endif + output_console("\nG %d:", page); if(crc32 == CRC32_SDPS_TONO || crc32 == CRC32_SDPS_KAIZOKU) { if(20 <= page && page <= 100) { @@ -943,11 +871,7 @@ void NACT_Sys2::cmd_h() int length = getd(); int val = cali(); -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nH %d,%d:", length, val); - output_console(log); -#endif + output_console("\nH %d,%d:", length, val); // 8桁の文字列を生成 char tmp[8]; @@ -989,11 +913,7 @@ void NACT_Sys2::cmd_i() int p2 = cali(); int p3 = getd(); -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nI %d,%d,%d:", p1, p2, p3); - output_console(log); -#endif + output_console("\nI %d,%d,%d:", p1, p2, p3); } void NACT_Sys2::cmd_j() @@ -1001,11 +921,7 @@ void NACT_Sys2::cmd_j() int p1 = cali(); int p2 = cali(); -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nJ %d,%d:", p1, p2); - output_console(log); -#endif + output_console("\nJ %d,%d:", p1, p2); } void NACT_Sys2::cmd_k() @@ -1018,11 +934,7 @@ void NACT_Sys2::cmd_l() { int index = getd(); -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nL %d:", index); - output_console(log); -#endif + output_console("\nL %d:", index); if(1 <= index && index <= 26) { // ASLEEP_A.DAT - ASLEEP_Z.DAT @@ -1136,11 +1048,7 @@ void NACT_Sys2::cmd_m() } string[p] = '\0'; -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nM %s:", string); - output_console(log); -#endif + output_console("\nM %s:", string); if(1 <= tvar_index && tvar_index <= 10) { memcpy(tvar[tvar_index - 1], string, 22); @@ -1152,11 +1060,7 @@ void NACT_Sys2::cmd_n() int p1 = cali(); int p2 = cali(); -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nN %d,%d:", p1, p2); - output_console(log); -#endif + output_console("\nN %d,%d:", p1, p2); } void NACT_Sys2::cmd_o() @@ -1165,11 +1069,7 @@ void NACT_Sys2::cmd_o() int width = cali(); int height = cali(); -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nO %d,%d,%d:", st, width, height); - output_console(log); -#endif + output_console("\nO %d,%d,%d:", st, width, height); // white mesh int sx = (st % 80) * 8; @@ -1183,11 +1083,7 @@ void NACT_Sys2::cmd_p() ags->text_font_color = (uint8)((param & 0x7) + 16); -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nP %d:", param); - output_console(log); -#endif + output_console("\nP %d:", param); } #define FWRITE(data, size) { \ @@ -1214,11 +1110,7 @@ void NACT_Sys2::cmd_q() int index = getd(); -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nQ %d:", index); - output_console(log); -#endif + output_console("\nQ %d:", index); if(1 <= index && index <= 26) { // ASLEEP_A.DAT - ASLEEP_Z.DAT @@ -1295,11 +1187,7 @@ void NACT_Sys2::cmd_q() void NACT_Sys2::cmd_r() { -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "R\n"); - output_console(log); -#endif + output_console("R\n"); // ウィンドウの表示範囲外の場合は改ページ if(ags->return_text_line(text_window)) { @@ -1311,11 +1199,7 @@ void NACT_Sys2::cmd_s() { int page = getd(); -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nS %d:", page); - output_console(log); -#endif + output_console("\nS %d:", page); if(page) { mako->play_music(page); @@ -1330,11 +1214,7 @@ void NACT_Sys2::cmd_t() int p2 = cali(); int p3 = cali(); -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nT %d,%d,%d:", p1, p2, p3); - output_console(log); -#endif + output_console("\nT %d,%d,%d:", p1, p2, p3); } void NACT_Sys2::cmd_u() @@ -1342,11 +1222,7 @@ void NACT_Sys2::cmd_u() int page = getd(); int transparent = getd(); -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nU %d,%d:", page, transparent); - output_console(log); -#endif + output_console("\nU %d,%d:", page, transparent); ags->load_cg(page, transparent); } @@ -1356,11 +1232,7 @@ void NACT_Sys2::cmd_v() int p1 = cali(); int p2 = cali(); -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nV %d,%d:", p1, p2); - output_console(log); -#endif + output_console("\nV %d,%d:", p1, p2); } void NACT_Sys2::cmd_w() @@ -1370,22 +1242,14 @@ void NACT_Sys2::cmd_w() int p3 = cali(); int p4 = cali(); -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nW %d,%d,%d,%d:", p1, p2, p3, p4); - output_console(log); -#endif + output_console("\nW %d,%d,%d,%d:", p1, p2, p3, p4); } void NACT_Sys2::cmd_x() { int index = getd(); -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nX %d:", index); - output_console(log); -#endif + output_console("\nX %d:", index); if(1 <= index && index <= 10) { ags->draw_text(tvar[index - 1]); @@ -1397,11 +1261,7 @@ void NACT_Sys2::cmd_y() int cmd = cali(); int param = cali(); -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nY %d,%d:", cmd, param); - output_console(log); -#endif + output_console("\nY %d,%d:", cmd, param); switch(cmd) { case 1: @@ -1560,11 +1420,7 @@ void NACT_Sys2::cmd_z() int cmd = cali(); int param = cali(); -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nZ %d,%d:", cmd, param); - output_console(log); -#endif + output_console("\nZ %d,%d:", cmd, param); // Z1 // Z2 diff --git a/src/sys/nact_sys3.cpp b/src/sys/nact_sys3.cpp index aa5dede..96ff1ea 100644 --- a/src/sys/nact_sys3.cpp +++ b/src/sys/nact_sys3.cpp @@ -28,11 +28,7 @@ void NACT_Sys3::cmd_calc() } var[index] = cali(); -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\n!var[%d]:%d!", index, var[index]); - output_console(log); -#endif + output_console("\n!var[%d]:%d!", index, var[index]); } void NACT_Sys3::cmd_branch() @@ -44,11 +40,7 @@ void NACT_Sys3::cmd_branch() // sigmarion3 最適化誤爆の対策 scenario_addr = condition ? t_addr : f_addr; -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\n{%d: T:%4x, F:%4x", condition, t_addr, f_addr); - output_console(log); -#endif + output_console("\n{%d: T:%4x, F:%4x", condition, t_addr, f_addr); } void NACT_Sys3::cmd_label_jump() @@ -56,22 +48,14 @@ void NACT_Sys3::cmd_label_jump() int next_addr = getw(); scenario_addr = next_addr; -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\n@%x:", next_addr); - output_console(log); -#endif + output_console("\n@%x:", next_addr); } void NACT_Sys3::cmd_label_call() { int next_addr = getw(); -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\n\\%x:", next_addr); - output_console(log); -#endif + output_console("\n\\%x:", next_addr); if(next_addr == 0) { // リターン @@ -93,22 +77,14 @@ void NACT_Sys3::cmd_page_jump() scenario_page = next_page; scenario_addr = 2; -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\n&%d:", next_page); - output_console(log); -#endif + output_console("\n&%d:", next_page); } void NACT_Sys3::cmd_page_call() { int next_page = cali(), next_addr; -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\n%%%d:", next_page); - output_console(log); -#endif + output_console("\n%%%d:", next_page); if(next_page == 0) { // リターン @@ -135,11 +111,7 @@ void NACT_Sys3::cmd_set_menu() ags->menu_dest_y += ags->menu_font_size + 2; ags->draw_menu = false; -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "$"); - output_console(log); -#endif + output_console("$"); } else { if(!menu_index) { ags->clear_menu_window(); @@ -150,11 +122,7 @@ void NACT_Sys3::cmd_set_menu() ags->menu_dest_y += 2; ags->draw_menu = true; -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\n$%x,", menu_addr[menu_index - 1]); - output_console(log); -#endif + output_console("\n$%x,", menu_addr[menu_index - 1]); } } @@ -260,11 +228,7 @@ int NACT_Sys3::menu_select(int num_items) void NACT_Sys3::cmd_open_menu() { -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\n]"); - output_console(log); -#endif + output_console("\n]"); if(!menu_index) { scenario_addr = scenario_data[0] | (scenario_data[1] << 8); @@ -292,11 +256,7 @@ void NACT_Sys3::cmd_set_verbobj() menu_obj[menu_index++] = obj; verb_obj = true; -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\n[%x,%s,%s:", addr, caption_verb[verb], caption_obj[obj]); - output_console(log); -#endif + output_console("\n[%x,%s,%s:", addr, caption_verb[verb], caption_obj[obj]); } void NACT_Sys3::cmd_set_verbobj2() @@ -313,21 +273,13 @@ void NACT_Sys3::cmd_set_verbobj2() } verb_obj = true; -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\n:%d,%x,%s,%s:", condition, addr, caption_verb[verb], caption_obj[obj]); - output_console(log); -#endif + output_console("\n:%d,%x,%s,%s:", condition, addr, caption_verb[verb], caption_obj[obj]); } void NACT_Sys3::cmd_open_verb() { // 動詞メニューの表示 -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nopen verb-obj menu"); - output_console(log); -#endif + output_console("\nopen verb-obj menu"); verb_obj = false; // 表示する動詞のチェック @@ -431,11 +383,7 @@ void NACT_Sys3::cmd_a() { texthook_nextpage(); -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "A\n"); - output_console(log); -#endif + output_console("A\n"); if(!text_skip_enb) { // Pushマークの表示 @@ -479,11 +427,7 @@ void NACT_Sys3::cmd_b() int p4 = cali(); int p5 = cali(); -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nB %d,%d,%d,%d,%d,%d,%d:", cmd, index, p1, p2, p3, p4, p5); - output_console(log); -#endif + output_console("\nB %d,%d,%d,%d,%d,%d,%d:", cmd, index, p1, p2, p3, p4, p5); if(cmd == 1) { // あゆみちゃん物語 @@ -556,11 +500,7 @@ void NACT_Sys3::cmd_e() int ex = cali(); int ey = cali(); -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nE %d,%d,%d,%d,%d,%d:", index, color, sx, sy, ex, ey); - output_console(log); -#endif + output_console("\nE %d,%d,%d,%d,%d,%d:", index, color, sx, sy, ex, ey); ags->box[index - 1].color = color; ags->box[index - 1].sx = column ? sx * 8 : sx; @@ -571,11 +511,7 @@ void NACT_Sys3::cmd_e() void NACT_Sys3::cmd_f() { -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nF"); - output_console(log); -#endif + output_console("\nF"); scenario_addr = 2; } @@ -584,11 +520,7 @@ void NACT_Sys3::cmd_g() { int page = cali(); -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nG %d:", page); - output_console(log); -#endif + output_console("\nG %d:", page); ags->load_cg(page, -1); } @@ -598,11 +530,7 @@ void NACT_Sys3::cmd_h() int length = getd(); int val = cali(); -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nH %d,%d:", length, val); - output_console(log); -#endif + output_console("\nH %d,%d:", length, val); // 隠しコマンド? if(length >= 9) { @@ -653,11 +581,7 @@ void NACT_Sys3::cmd_i() int dx = cali(); int dy = cali(); -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nI %d,%d,%d,%d,%d,%d:", sx, sy, ex, ey, dx, dy); - output_console(log); -#endif + output_console("\nI %d,%d,%d,%d,%d,%d:", sx, sy, ex, ey, dx, dy); // X方向はカラム単位で切り捨て sx = column ? sx * 8 : sx & 0xfff8; @@ -671,11 +595,7 @@ void NACT_Sys3::cmd_j() int x = cali(); int y = cali(); -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nJ %d,%d:", x, y); - output_console(log); -#endif + output_console("\nJ %d,%d:", x, y); // x方向はカラム単位で切り捨て ags->cg_dest_x = column ? x * 8 : x & 0xfff8; @@ -687,11 +607,7 @@ void NACT_Sys3::cmd_k() { int cmd = getd(), val; -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nK %d:", cmd); - output_console(log); -#endif + output_console("\nK %d:", cmd); // K6の場合は、すぐに返る if(cmd == 6) { @@ -764,11 +680,7 @@ void NACT_Sys3::cmd_l() { int index = cali(); -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nL %d:", index); - output_console(log); -#endif + output_console("\nL %d:", index); if(index == 0) { // 特殊セーブ @@ -910,11 +822,7 @@ void NACT_Sys3::cmd_m() } string[p] = '\0'; -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nM %s:", string); - output_console(log); -#endif + output_console("\nM %s:", string); if(1 <= tvar_index && tvar_index <= 10) { memcpy(tvar[tvar_index - 1], string, 22); @@ -935,11 +843,7 @@ void NACT_Sys3::cmd_n() int src = cali(); int dest = cali(); -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nN %d,%d,%d:", cmd, src, dest); - output_console(log); -#endif + output_console("\nN %d,%d,%d:", cmd, src, dest); } void NACT_Sys3::cmd_o() @@ -964,11 +868,7 @@ void NACT_Sys3::cmd_o() B15 = (val & 0x4000) ? 1 : 0; B16 = (val & 0x8000) ? 1 : 0; -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nO %d,%d:", cmd, val); - output_console(log); -#endif + output_console("\nO %d,%d:", cmd, val); } else { uint16 val = 0; val |= B01 ? 0x0001 : 0; @@ -990,11 +890,7 @@ void NACT_Sys3::cmd_o() int index = cali2(); var[index] = val; -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nO %d,var[%d]:", cmd, index); - output_console(log); -#endif + output_console("\nO %d,var[%d]:", cmd, index); } } @@ -1005,11 +901,7 @@ void NACT_Sys3::cmd_p() int g = cali(); int b = cali(); -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nP %d,%d,%d,%d:", index, r, g, b); - output_console(log); -#endif + output_console("\nP %d,%d,%d,%d:", index, r, g, b); ags->set_palette(index, r, g, b); set_palette = true; @@ -1051,11 +943,7 @@ void NACT_Sys3::cmd_q() int index = cali(); -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nQ %d:", index); - output_console(log); -#endif + output_console("\nQ %d:", index); if(index == 0) { // 特殊セーブ @@ -1149,11 +1037,7 @@ void NACT_Sys3::cmd_r() { texthook_newline(); -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "R\n"); - output_console(log); -#endif + output_console("R\n"); // ウィンドウの表示範囲外の場合は改ページ if(ags->return_text_line(text_window)) { @@ -1165,11 +1049,7 @@ void NACT_Sys3::cmd_s() { int page = getd(); -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nS %d:", page); - output_console(log); -#endif + output_console("\nS %d:", page); if(page) { mako->play_music(page); @@ -1183,11 +1063,7 @@ void NACT_Sys3::cmd_t() int x = cali(); int y = cali(); -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nT %d,%d:", x, y); - output_console(log); -#endif + output_console("\nT %d,%d:", x, y); // x方向はカラム単位で切り捨て ags->text_dest_x = column ? x * 8 : x & 0xfff8; @@ -1199,11 +1075,7 @@ void NACT_Sys3::cmd_u() int page = cali(); int transparent = cali(); -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nU %d,%d:", page, transparent); - output_console(log); -#endif + output_console("\nU %d,%d:", page, transparent); if(crc32 == CRC32_RANCE41 || crc32 == CRC32_RANCE42) { transparent = (transparent == 28) ? 12 : transparent; @@ -1216,11 +1088,7 @@ void NACT_Sys3::cmd_v() int cmd = cali(); int index = cali(); -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nV %d,%d:", cmd, index); - output_console(log); -#endif + output_console("\nV %d,%d:", cmd, index); if(cmd == 0) { for(int i = 0; i < 20; i++) { @@ -1245,11 +1113,7 @@ void NACT_Sys3::cmd_w() int y = cali(); uint8 color = (uint8)cali(); -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nW %d,%d,%d", x, y, color); - output_console(log); -#endif + output_console("\nW %d,%d,%d", x, y, color); ags->paint(x, y, color); } @@ -1258,11 +1122,7 @@ void NACT_Sys3::cmd_x() { int index = getd(); -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nX %d:", index); - output_console(log); -#endif + output_console("\nX %d:", index); if(1 <= index && index <= 10) { ags->draw_text(tvar[index - 1]); @@ -1274,11 +1134,7 @@ void NACT_Sys3::cmd_y() int cmd = cali(); int param = cali(); -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nY %d,%d:", cmd, param); - output_console(log); -#endif + output_console("\nY %d,%d:", cmd, param); switch(cmd) { case 1: @@ -1660,11 +1516,7 @@ void NACT_Sys3::cmd_z() int cmd = cali(); int param = cali(); -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nZ %d,%d:", cmd, param); - output_console(log); -#endif + output_console("\nZ %d,%d:", cmd, param); if(cmd == 0) { ags->palette_bank = (uint8)(param & 0xff); diff --git a/src/win/nact_win.cpp b/src/win/nact_win.cpp index 4ca2e08..0d7d7ac 100644 --- a/src/win/nact_win.cpp +++ b/src/win/nact_win.cpp @@ -92,9 +92,13 @@ void NACT::release_console() #endif } -void NACT::output_console(char log[]) +void NACT::output_console(const char *format, ...) { #if defined(_DEBUG_CONSOLE) - fputs(log, stdout); + va_list ap; + + va_start(ap, format); + vfprintf(stdout, format, ap); + va_end(ap); #endif } From 131707f9d85de0873878b4eaa6bee2ec47ca9582 Mon Sep 17 00:00:00 2001 From: kichikuou Date: Fri, 22 May 2020 09:32:04 +0900 Subject: [PATCH 02/14] Merge upstream changes: Improve error messages for unknown commands Unlike the upstream, we use fatal() because it generates a message box even if DEBUG_CONSOLE is disabled. --- src/sys/nact.cpp | 7 ++++++- src/sys/nact.h | 2 +- src/sys/nact_sys1.cpp | 21 ++++++++++++++++++++- src/sys/nact_sys2.cpp | 8 +++++++- src/sys/nact_sys3.cpp | 1 + 5 files changed, 35 insertions(+), 4 deletions(-) diff --git a/src/sys/nact.cpp b/src/sys/nact.cpp index 2675169..bfc43c1 100644 --- a/src/sys/nact.cpp +++ b/src/sys/nact.cpp @@ -165,6 +165,7 @@ void NACT::execute(T* impl) } // 1コマンド実行 + prev_addr = scenario_addr; uint8 cmd = getd(); if(set_palette && cmd != 'P') { @@ -345,7 +346,11 @@ void NACT::execute(T* impl) } output_console(string); } else { - fatal("Unknown command %2x at %d", cmd, scenario_addr); + if(cmd >= 0x20 && cmd < 0x7f) { + fatal("Unknown Command: '%c' at page = %d, addr = %d", cmd, scenario_page, prev_addr); + } else { + fatal("Unknown Command: %02x at page = %d, addr = %d", cmd, scenario_page, prev_addr); + } } break; } diff --git a/src/sys/nact.h b/src/sys/nact.h index aa92a35..4231e94 100644 --- a/src/sys/nact.h +++ b/src/sys/nact.h @@ -109,7 +109,7 @@ protected: int scenario_size; // アドレス、ページ管理 - int scenario_addr; + int scenario_addr, prev_addr; int scenario_page; int label_depth; int label_stack[MAX_STACK]; diff --git a/src/sys/nact_sys1.cpp b/src/sys/nact_sys1.cpp index 34766cd..7f4301a 100644 --- a/src/sys/nact_sys1.cpp +++ b/src/sys/nact_sys1.cpp @@ -127,7 +127,9 @@ void NACT_Sys1::cmd_branch() bool set_menu = false; if(!condition) { + // 次の'}'命令までスキップする(ネストも考慮する) for(;;) { + prev_addr = scenario_addr; uint8 cmd = getd(); if(cmd == '!') { @@ -209,7 +211,11 @@ void NACT_Sys1::cmd_branch() // message (2 bytes) getd(); } else { - fatal("cmd_branch: invalid command %2x", cmd); + if(cmd >= 0x20 && cmd < 0x7f) { + fatal("Unknown Command: '%c' at page = %d, addr = %d", cmd, scenario_page, prev_addr); + } else { + fatal("Unknown Command: %02x at page = %d, addr = %d", cmd, scenario_page, prev_addr); + } break; } } @@ -833,16 +839,19 @@ void NACT_Sys1::cmd_a() void NACT_Sys1::cmd_b() { // 未使用 + fatal("Unknown Command: 'B' at page = %d, addr = %d", scenario_page, prev_addr); } void NACT_Sys1::cmd_d() { // 未使用 + fatal("Unknown Command: 'D' at page = %d, addr = %d", scenario_page, prev_addr); } void NACT_Sys1::cmd_e() { // 未使用 + fatal("Unknown Command: 'E' at page = %d, addr = %d", scenario_page, prev_addr); } void NACT_Sys1::cmd_f() @@ -877,21 +886,25 @@ void NACT_Sys1::cmd_g() void NACT_Sys1::cmd_h() { // 未使用 + fatal("Unknown Command: 'H' at page = %d, addr = %d", scenario_page, prev_addr); } void NACT_Sys1::cmd_i() { // 未使用 + fatal("Unknown Command: 'I' at page = %d, addr = %d", scenario_page, prev_addr); } void NACT_Sys1::cmd_j() { // 未使用 + fatal("Unknown Command: 'J' at page = %d, addr = %d", scenario_page, prev_addr); } void NACT_Sys1::cmd_k() { // 未使用 + fatal("Unknown Command: 'K' at page = %d, addr = %d", scenario_page, prev_addr); } void NACT_Sys1::cmd_l() @@ -999,16 +1012,19 @@ void NACT_Sys1::cmd_l() void NACT_Sys1::cmd_m() { // 未使用 + fatal("Unknown Command: 'M' at page = %d, addr = %d", scenario_page, prev_addr); } void NACT_Sys1::cmd_n() { // 未使用 + fatal("Unknown Command: 'N' at page = %d, addr = %d", scenario_page, prev_addr); } void NACT_Sys1::cmd_o() { // 未使用 + fatal("Unknown Command: 'O' at page = %d, addr = %d", scenario_page, prev_addr); } void NACT_Sys1::cmd_p() @@ -1145,6 +1161,7 @@ void NACT_Sys1::cmd_s() void NACT_Sys1::cmd_t() { // 未使用 + fatal("Unknown Command: 'T' at page = %d, addr = %d", scenario_page, prev_addr); } void NACT_Sys1::cmd_u() @@ -1168,11 +1185,13 @@ void NACT_Sys1::cmd_u() void NACT_Sys1::cmd_v() { // 未使用 + fatal("Unknown Command: 'V' at page = %d, addr = %d", scenario_page, prev_addr); } void NACT_Sys1::cmd_w() { // 未使用 + fatal("Unknown Command: 'W' at page = %d, addr = %d", scenario_page, prev_addr); } void NACT_Sys1::cmd_x() diff --git a/src/sys/nact_sys2.cpp b/src/sys/nact_sys2.cpp index 50ce7c8..5ab52b5 100644 --- a/src/sys/nact_sys2.cpp +++ b/src/sys/nact_sys2.cpp @@ -80,7 +80,9 @@ void NACT_Sys2::cmd_branch() bool set_menu = false; if(!condition) { + // 次の'}'命令までスキップする(ネストも考慮する) for(;;) { + prev_addr = scenario_addr; uint8 cmd = getd(); if(cmd == '!') { @@ -226,7 +228,11 @@ void NACT_Sys2::cmd_branch() // message (2 bytes) getd(); } else { - fatal("cmd_branch: invalid command %2x", cmd); + if(cmd >= 0x20 && cmd < 0x7f) { + fatal("Unknown Command: '%c' at page = %d, addr = %d", cmd, scenario_page, prev_addr); + } else { + fatal("Unknown Command: %02x at page = %d, addr = %d", cmd, scenario_page, prev_addr); + } break; } } diff --git a/src/sys/nact_sys3.cpp b/src/sys/nact_sys3.cpp index 96ff1ea..a69f6d7 100644 --- a/src/sys/nact_sys3.cpp +++ b/src/sys/nact_sys3.cpp @@ -489,6 +489,7 @@ void NACT_Sys3::cmd_b() void NACT_Sys3::cmd_d() { // 未使用 + fatal("Unknown Command: 'D' at page = %d, addr = %d", scenario_page, prev_addr); } void NACT_Sys3::cmd_e() From e8d254328a7921397dae2ac48845600a3eef2bdd Mon Sep 17 00:00:00 2001 From: kichikuou Date: Fri, 22 May 2020 12:04:36 +0900 Subject: [PATCH 03/14] Merge upstream changes: Merge FILEIO changes FILEIO has been updated to resolve relative paths inside FILEIO::Fopen(), which has been already done in System3-sdl2. FILEIO::Fgets() now uses a length param. Callsites for these functions are also updated to reduce the diff from upstream. --- src/fileio.cpp | 14 +++++++---- src/fileio.h | 4 +-- src/sys/ags.h | 2 +- src/sys/ags_bmp.cpp | 5 ++-- src/sys/ags_draw.cpp | 14 +++++------ src/sys/dri.cpp | 15 ++++++------ src/sys/nact.cpp | 6 ++--- src/sys/nact_crc32.cpp | 1 + src/sys/nact_sys1.cpp | 14 +++++------ src/sys/nact_sys2.cpp | 14 +++++------ src/sys/nact_sys3.cpp | 55 ++++++++++++++++++++++-------------------- 11 files changed, 73 insertions(+), 71 deletions(-) diff --git a/src/fileio.cpp b/src/fileio.cpp index 8c2e86f..4bb0e6c 100644 --- a/src/fileio.cpp +++ b/src/fileio.cpp @@ -40,13 +40,13 @@ FILEIO::~FILEIO(void) } } -bool FILEIO::Fopen(const char *filename, int mode) +bool FILEIO::Fopen(const char *file_name, int mode) { mode_ = mode; char path[_MAX_PATH]; sprintf_s(path, _MAX_PATH, "%s%s", (g_savedir && mode & FILEIO_SAVEDATA) ? g_savedir : g_root, - filename); + file_name); mode &= ~FILEIO_SAVEDATA; @@ -115,7 +115,7 @@ int FILEIO::Fgetw() return val | (Fgetc() << 8); } -void FILEIO::Fgets(char dest[]) +void FILEIO::Fgets(char *dest, int length) { int p = 0; @@ -125,9 +125,13 @@ void FILEIO::Fgets(char dest[]) break; } if(c != 0x0a) { - dest[p++] = c; + if(p < length + 1) { + dest[p++] = c; + } if((0x81 <= c && c <= 0x9f) || 0xe0 <= c) { - dest[p++] = Fgetc(); + if(p < length + 1) { + dest[p++] = Fgetc(); + } } } } diff --git a/src/fileio.h b/src/fileio.h index 99e71cf..aedd4a9 100644 --- a/src/fileio.h +++ b/src/fileio.h @@ -30,7 +30,7 @@ public: static void SetSaveDir(const char* savedir); static int StatSavedata(const char* filename, struct stat* buf); - bool Fopen(const char *filename, int mode); + bool Fopen(const char *file_name, int mode); void Fclose(); uint32 Fseek(long offset, int origin); uint32 Ftell(); @@ -38,7 +38,7 @@ public: uint32 Fwrite(void* buffer, uint32 size, uint32 count); int Fgetc(); int Fgetw(); - void Fgets(char dest[]); + void Fgets(char* dest, int length); void Fputc(int c); void Fputw(int w); }; diff --git a/src/sys/ags.h b/src/sys/ags.h index fa3adb8..4f1f298 100644 --- a/src/sys/ags.h +++ b/src/sys/ags.h @@ -64,7 +64,7 @@ private: void load_gm3(uint8* data, int page, int transparent); // Intruder void load_vsp(uint8* data, int page, int transparent); void load_pms(uint8* data, int page, int transparent); - void load_bmp(const char *file_path); + void load_bmp(const char* file_name); // あゆみちゃん物語 フルカラー実写版 void draw_char(int dest, int dest_x, int dest_y, uint16 code, int size, uint8 color); void draw_char_antialias(int dest, int dest_x, int dest_y, uint16 code, int size, uint8 color, uint8 cache[]); diff --git a/src/sys/ags_bmp.cpp b/src/sys/ags_bmp.cpp index bf41448..ab1bbc9 100644 --- a/src/sys/ags_bmp.cpp +++ b/src/sys/ags_bmp.cpp @@ -5,8 +5,9 @@ */ #include "ags.h" +#include "../fileio.h" -void AGS::load_bmp(const char *file_path) +void AGS::load_bmp(const char* file_name) { // ヘッダ取得 int sx = 0, sy = 0; @@ -23,7 +24,7 @@ void AGS::load_bmp(const char *file_path) #if 0 // BMP読み込み WCHAR wszFilePath[_MAX_PATH]; - MultiByteToWideChar(CP_ACP, 0, file_path, -1, wszFilePath, _MAX_PATH); + MultiByteToWideChar(CP_ACP, 0, FILEIO::GetFilePath(file_name), -1, wszFilePath, _MAX_PATH); Gdiplus::Bitmap *pBitmap = Gdiplus::Bitmap::FromFile(wszFilePath); for(unsigned int y = 0; y < pBitmap->GetHeight(); y++) { for(unsigned int x = 0; x < pBitmap->GetWidth(); x++) { diff --git a/src/sys/ags_draw.cpp b/src/sys/ags_draw.cpp index 1ed1963..d8dd8c4 100644 --- a/src/sys/ags_draw.cpp +++ b/src/sys/ags_draw.cpp @@ -8,21 +8,19 @@ #include "dri.h" #include "crc32.h" -extern char g_root[_MAX_PATH]; - void AGS::load_cg(int page, int transparent) { if (nact->sys_ver == 3) { // あゆみちゃん物語 フルカラー実写版 if(strncmp(acg, "CGA000.BMP", 10) == 0) { - char file_path[_MAX_PATH]; - sprintf_s(file_path, _MAX_PATH, "%sCGA%03d.BMP", g_root, page); - load_bmp(file_path); + char file_name[_MAX_PATH]; + sprintf_s(file_name, _MAX_PATH, "CGA%03d.BMP", page); + load_bmp(file_name); return; } else if(strncmp(acg, "CGB000.BMP", 10) == 0) { - char file_path[_MAX_PATH]; - sprintf_s(file_path, _MAX_PATH, "%sCGB%03d.BMP", g_root, page); - load_bmp(file_path); + char file_name[_MAX_PATH]; + sprintf_s(file_name, _MAX_PATH, "CGB%03d.BMP", page); + load_bmp(file_name); return; } } diff --git a/src/sys/dri.cpp b/src/sys/dri.cpp index 4edb682..4197a2e 100644 --- a/src/sys/dri.cpp +++ b/src/sys/dri.cpp @@ -8,17 +8,16 @@ #include "crc32.h" #include "../fileio.h" -uint8* DRI::load(const char* path, int page, int* size) +uint8* DRI::load(const char* file_name, int page, int* size) { - char base_path[_MAX_PATH]; - strcpy_s(base_path, _MAX_PATH, path); + char tmp_name[_MAX_PATH]; + strcpy_s(tmp_name, _MAX_PATH, file_name); FILEIO* fio = new FILEIO(); // ページの位置を取得 - base_path[0] = 'A'; - - if(!fio->Fopen(base_path, FILEIO_READ_BINARY)) { + tmp_name[0] = 'A'; + if(!fio->Fopen(tmp_name, FILEIO_READ_BINARY)) { delete fio; return NULL; } @@ -48,9 +47,9 @@ uint8* DRI::load(const char* path, int page, int* size) // A??.DAT以外にリンクされている場合はファイルを開き直す if(disk_index != 1) { - base_path[0] = 'A' + disk_index - 1; + tmp_name[0] = 'A' + disk_index - 1; fio->Fclose(); - if(!fio->Fopen(base_path, FILEIO_READ_BINARY)) { + if(!fio->Fopen(tmp_name, FILEIO_READ_BINARY)) { delete fio; return NULL; } diff --git a/src/sys/nact.cpp b/src/sys/nact.cpp index bfc43c1..d49c167 100644 --- a/src/sys/nact.cpp +++ b/src/sys/nact.cpp @@ -27,16 +27,16 @@ NACT::NACT(int sys_ver, uint32 crc32, const char* font_file, const char* playlis if(fio->Fopen("AG00.DAT", FILEIO_READ_BINARY)) { int d0, d1, d2, d3; char string[MAX_CAPTION]; - fio->Fgets(string); + fio->Fgets(string, MAX_CAPTION); sscanf_s(string, "%d,%d,%d,%d", &d0, &d1, &d2, &d3); for(int i = 0; i < d1; i++) { // 動詞の読み込み - fio->Fgets(string); + fio->Fgets(string, MAX_CAPTION); memcpy(caption_verb[i], string, sizeof(string)); } for(int i = 0; i < d2; i++) { // 目的語の読み込み - fio->Fgets(string); + fio->Fgets(string, MAX_CAPTION); memcpy(caption_obj[i], string, sizeof(string)); } fio->Fclose(); diff --git a/src/sys/nact_crc32.cpp b/src/sys/nact_crc32.cpp index a2ed177..3826b79 100644 --- a/src/sys/nact_crc32.cpp +++ b/src/sys/nact_crc32.cpp @@ -77,6 +77,7 @@ uint32 NACT::calc_crc32(const char* game_id) uint32 crc = 0; FILEIO* fio = new FILEIO(); + if(fio->Fopen("ADISK.DAT", FILEIO_READ_BINARY)) { uint32 table[256]; for(int i = 0; i < 256; i++) { diff --git a/src/sys/nact_sys1.cpp b/src/sys/nact_sys1.cpp index 7f4301a..69616d8 100644 --- a/src/sys/nact_sys1.cpp +++ b/src/sys/nact_sys1.cpp @@ -915,12 +915,11 @@ void NACT_Sys1::cmd_l() if(1 <= index && index <= 26) { // ASLEEP_A.DAT - ASLEEP_Z.DAT - char path[_MAX_PATH]; - strcpy_s(path, _MAX_PATH, "ASLEEP_A.DAT"); - path[7] = 'A' + index - 1; + char file_name[_MAX_PATH]; + sprintf_s(file_name, _MAX_PATH, "ASLEEP_%c.DAT", 'A' + index - 1); FILEIO* fio = new FILEIO(); - if(fio->Fopen(path, FILEIO_READ_BINARY)) { + if(fio->Fopen(file_name, FILEIO_READ_BINARY)) { fio->Fseek(112, FILEIO_SEEK_SET); int next_page = fio->Fgetw() - 1; @@ -1064,12 +1063,11 @@ void NACT_Sys1::cmd_q() if(1 <= index && index <= 26) { // ASLEEP_A.DAT - ASLEEP_Z.DAT - char path[_MAX_PATH]; - strcpy_s(path, _MAX_PATH, "ASLEEP_A.DAT"); - path[7] = 'A' + index - 1; + char file_name[_MAX_PATH]; + sprintf_s(file_name, _MAX_PATH, "ASLEEP_%c.DAT", 'A' + index - 1); FILEIO* fio = new FILEIO(); - if(fio->Fopen(path, FILEIO_WRITE_BINARY)) { + if(fio->Fopen(file_name, FILEIO_WRITE_BINARY)) { uint8 buffer[9510]; int p = 0; diff --git a/src/sys/nact_sys2.cpp b/src/sys/nact_sys2.cpp index 5ab52b5..a9e2034 100644 --- a/src/sys/nact_sys2.cpp +++ b/src/sys/nact_sys2.cpp @@ -944,12 +944,11 @@ void NACT_Sys2::cmd_l() if(1 <= index && index <= 26) { // ASLEEP_A.DAT - ASLEEP_Z.DAT - char path[_MAX_PATH]; - strcpy_s(path, _MAX_PATH, "ASLEEP_A.DAT"); - path[7] = 'A' + index - 1; + char file_name[_MAX_PATH]; + sprintf_s(file_name, _MAX_PATH, "ASLEEP_%c.DAT", 'A' + index - 1); FILEIO* fio = new FILEIO(); - if(fio->Fopen(path, FILEIO_READ_BINARY)) { + if(fio->Fopen(file_name, FILEIO_READ_BINARY)) { fio->Fseek(112, FILEIO_SEEK_SET); int next_page = fio->Fgetw() - 1; @@ -1120,12 +1119,11 @@ void NACT_Sys2::cmd_q() if(1 <= index && index <= 26) { // ASLEEP_A.DAT - ASLEEP_Z.DAT - char path[_MAX_PATH]; - strcpy_s(path, _MAX_PATH, "ASLEEP_A.DAT"); - path[7] = 'A' + index - 1; + char file_name[_MAX_PATH]; + sprintf_s(file_name, _MAX_PATH, "ASLEEP_%c.DAT", 'A' + index - 1); FILEIO* fio = new FILEIO(); - if(fio->Fopen(path, FILEIO_WRITE_BINARY)) { + if(fio->Fopen(file_name, FILEIO_WRITE_BINARY)) { uint8 buffer[9510]; int p = 0; diff --git a/src/sys/nact_sys3.cpp b/src/sys/nact_sys3.cpp index a69f6d7..1a2999f 100644 --- a/src/sys/nact_sys3.cpp +++ b/src/sys/nact_sys3.cpp @@ -700,12 +700,11 @@ void NACT_Sys3::cmd_l() delete fio; } else if(1 <= index && index <= 26) { // ASLEEP_A.DAT - ASLEEP_Z.DAT - char path[_MAX_PATH]; - strcpy_s(path, _MAX_PATH, "ASLEEP_A.DAT"); - path[7] = 'A' + index - 1; + char file_name[_MAX_PATH]; + sprintf_s(file_name, _MAX_PATH, "ASLEEP_%c.DAT", 'A' + index - 1); FILEIO* fio = new FILEIO(); - if(fio->Fopen(path, FILEIO_READ_BINARY | FILEIO_SAVEDATA)) { + if(fio->Fopen(file_name, FILEIO_READ_BINARY | FILEIO_SAVEDATA)) { fio->Fseek(112, FILEIO_SEEK_SET); int next_page = fio->Fgetw() - 1; @@ -793,12 +792,11 @@ void NACT_Sys3::cmd_l() delete fio; } else if(101 <= index && index <= 126) { // ASLEEP_A.DAT - ASLEEP_Z.DAT - char path[_MAX_PATH]; - strcpy_s(path, _MAX_PATH, "ASLEEP_A.DAT"); - path[7] = 'A' + index - 101; + char file_name[_MAX_PATH]; + sprintf_s(file_name, _MAX_PATH, "ASLEEP_%c.DAT", 'A' + index - 101); FILEIO* fio = new FILEIO(); - if(fio->Fopen(path, FILEIO_READ_BINARY | FILEIO_SAVEDATA)) { + if(fio->Fopen(file_name, FILEIO_READ_BINARY | FILEIO_SAVEDATA)) { fio->Fseek(112 + 16, FILEIO_SEEK_SET); var[0] = fio->Fgetw(); fio->Fclose(); @@ -963,12 +961,11 @@ void NACT_Sys3::cmd_q() delete fio; } else if(1 <= index && index <= 26) { // ASLEEP_A.DAT - ASLEEP_Z.DAT - char path[_MAX_PATH]; - strcpy_s(path, _MAX_PATH, "ASLEEP_A.DAT"); - path[7] = 'A' + index - 1; + char file_name[_MAX_PATH]; + sprintf_s(file_name, _MAX_PATH, "ASLEEP_%c.DAT", 'A' + index - 1); FILEIO* fio = new FILEIO(); - if(fio->Fopen(path, FILEIO_WRITE_BINARY | FILEIO_SAVEDATA)) { + if(fio->Fopen(file_name, FILEIO_WRITE_BINARY | FILEIO_SAVEDATA)) { uint8 buffer[9510]; int p = 0; @@ -1452,13 +1449,12 @@ void NACT_Sys3::cmd_y() } break; case 239: - { - char path[_MAX_PATH]; - strcpy_s(path, _MAX_PATH, "ASLEEP_A.DAT"); - path[7] = 'A' + param - 1; + if(1 <= param && param <= 26) { + char file_name[_MAX_PATH]; + sprintf_s(file_name, _MAX_PATH, "ASLEEP_%c.DAT", 'A' + param - 1); struct stat statbuf; - if (FILEIO::StatSavedata(path, &statbuf) != -1) { + if (FILEIO::StatSavedata(file_name, &statbuf) != -1) { struct tm *t = localtime(&statbuf.st_mtime); D01 = t->tm_year + 1900; D02 = t->tm_mon + 1; @@ -1469,6 +1465,9 @@ void NACT_Sys3::cmd_y() } else { D01 = D02 = D03 = D04 = D05 = D06 = 0; } + } else { + // 不正なファイル番号 + D01 = D02 = D03 = D04 = D05 = D06 = 0; } break; case 240: @@ -1477,21 +1476,25 @@ void NACT_Sys3::cmd_y() case 241: break; case 250: - { #if 0 - char path[4]; - path[0] = g_root[0]; - path[1] = ':'; - path[2] = '\\'; - path[3] = '\0'; - UINT t = GetDriveType(path); + if(FILEIO::GetRootPath()[1] == ':') { + _TCHAR root_path[4]; + root_path[0] = FILEIO::GetRootPath()[0]; + root_path[1] = ':'; + root_path[2] = '\\'; + root_path[3] = '\0'; + + UINT t = GetDriveType(root_path); // フロッピーから起動した場合は0が返る //RND = (t == DRIVE_REMOVABLE) ? 0 : (t == DRIVE_CDROM) ? 2 : 1; RND = (t == DRIVE_CDROM) ? 2 : 1; -#else + } else { + // ネットワークドライブ? RND = 1; -#endif } +#else + RND = 1; +#endif break; case 251: column = param ? false : true; From 657057fa64591f108ff4597bd4f4c278c4ef93b4 Mon Sep 17 00:00:00 2001 From: kichikuou Date: Fri, 22 May 2020 16:09:55 +0900 Subject: [PATCH 04/14] Merge upstream changes: CRC32 updates - Check CRC32 of both ADISK.DAT (storead as crc32_a) and BDISK.DAT (crc32_b) - Update the CRC32 database adding more titles --- src/sys/ags.cpp | 6 +- src/sys/ags_draw.cpp | 6 +- src/sys/ags_pms.cpp | 10 +-- src/sys/ags_vsp.cpp | 4 +- src/sys/crc32.h | 46 +++++++++++--- src/sys/mako_midi.cpp | 4 +- src/sys/nact.cpp | 29 +++++---- src/sys/nact.h | 17 +++-- src/sys/nact_crc32.cpp | 137 +++++++++++++++++++---------------------- src/sys/nact_sys1.cpp | 53 +++++++++------- src/sys/nact_sys2.cpp | 12 ++-- src/sys/nact_sys3.cpp | 19 +++--- 12 files changed, 185 insertions(+), 158 deletions(-) diff --git a/src/sys/ags.cpp b/src/sys/ags.cpp index 6b8a81a..e2efb36 100644 --- a/src/sys/ags.cpp +++ b/src/sys/ags.cpp @@ -169,7 +169,7 @@ AGS::AGS(NACT* parent, const char* fontfile) : nact(parent) // Bコマンド for(int i = 0; i < 10; i++) { // ウィンドウの初期位置はシステムによって異なる - switch (nact->crc32) { + switch (nact->crc32_a) { case CRC32_BUNKASAI: SET_TEXT(i, 24, 304, 616, 384, false); SET_MENU(i, 440, 18, 620, 178, true); @@ -220,9 +220,9 @@ AGS::AGS(NACT* parent, const char* fontfile) : nact(parent) SET_BOX(i, 0, 0, 0, 639, 399); } if (nact->sys_ver == 2) { - if (nact->crc32 == CRC32_SDPS_TONO || nact->crc32 == CRC32_SDPS_KAIZOKU) { + if(nact->crc32_a == CRC32_SDPS && (nact->crc32_b == CRC32_SDPS_TONO || nact->crc32_b == CRC32_SDPS_KAIZOKU)) { SET_BOX(0, 0, 40, 8, 598, 271); - } else if (nact->crc32 == CRC32_PROSTUDENTG_FD) { + } else if(nact->crc32_a == CRC32_PROSTUDENTG_FD) { SET_BOX(0, 0, 64, 13, 407, 289); SET_BOX(1, 0, 24, 298, 111, 390); SET_BOX(2, 0, 0, 0, 639, 307); diff --git a/src/sys/ags_draw.cpp b/src/sys/ags_draw.cpp index d8dd8c4..05fc2ee 100644 --- a/src/sys/ags_draw.cpp +++ b/src/sys/ags_draw.cpp @@ -30,7 +30,7 @@ void AGS::load_cg(int page, int transparent) if(data && size > 0) { switch (nact->sys_ver) { case 1: - switch (nact->crc32) { + switch (nact->crc32_a) { case CRC32_BUNKASAI: load_vsp(data, page, transparent); break; @@ -47,10 +47,10 @@ void AGS::load_cg(int page, int transparent) } break; case 2: - if(nact->crc32 == CRC32_AYUMI_PROTO) { + if(nact->crc32_a == CRC32_AYUMI_PROTO) { // あゆみちゃん物語 PROTO load_gl3(data, page, transparent); - } else if(nact->crc32 == CRC32_SDPS_MARIA || nact->crc32 == CRC32_SDPS_TONO || nact->crc32 == CRC32_SDPS_KAIZOKU) { + } else if(nact->crc32_a == CRC32_SDPS) { // Super D.P.S load_pms(data, page, transparent); } else { diff --git a/src/sys/ags_pms.cpp b/src/sys/ags_pms.cpp index 23c125e..6d8d2b5 100644 --- a/src/sys/ags_pms.cpp +++ b/src/sys/ags_pms.cpp @@ -40,7 +40,7 @@ void AGS::load_pms(uint8* data, int page, int transparent) tmp_palette[i * 16 + j] = SETPALETTE256(r, g, b); } } - if(nact->crc32 == CRC32_RANCE41 || nact->crc32 == CRC32_RANCE42 || nact->crc32 == CRC32_HASHIRIONNA2) { + if(nact->crc32_a == CRC32_RANCE41 || nact->crc32_a == CRC32_RANCE42 || nact->crc32_a == CRC32_HASHIRIONNA2) { // 上下16色は取得しない for(int i = 1; i < 15; i++) { for(int j = 0; j < 16; j++) { @@ -49,7 +49,7 @@ void AGS::load_pms(uint8* data, int page, int transparent) } } } - } else if(nact->crc32 == CRC32_MUGENHOUYOU && transparent != -1) { + } else if(nact->crc32_a == CRC32_MUGENHOUYOU && transparent != -1) { // Uコマンドでは上下32色は取得しない for(int i = 2; i < 14; i++) { for(int j = 0; j < 16; j++) { @@ -71,8 +71,8 @@ void AGS::load_pms(uint8* data, int page, int transparent) // パレット展開 if (nact->sys_ver == 3) { - if((extract_palette && extract_palette_cg[page]) || nact->crc32 == CRC32_FUNNYBEE_CD) { - if(nact->crc32 == CRC32_RANCE41 || nact->crc32 == CRC32_RANCE42 || nact->crc32 == CRC32_HASHIRIONNA2) { + if((extract_palette && extract_palette_cg[page]) || nact->crc32_a == CRC32_FUNNYBEE_CD) { + if(nact->crc32_a == CRC32_RANCE41 || nact->crc32_a == CRC32_RANCE42 || nact->crc32_a == CRC32_HASHIRIONNA2) { // 上下16色は展開しない for(int i = 1; i < 15; i++) { for(int j = 0; j < 16; j++) { @@ -81,7 +81,7 @@ void AGS::load_pms(uint8* data, int page, int transparent) } } } - } else if(nact->crc32 == CRC32_MUGENHOUYOU && transparent != -1) { + } else if(nact->crc32_a == CRC32_MUGENHOUYOU && transparent != -1) { // Uコマンドでは上下32色は展開しない for(int i = 2; i < 14; i++) { for(int j = 0; j < 16; j++) { diff --git a/src/sys/ags_vsp.cpp b/src/sys/ags_vsp.cpp index 5a59b42..cc3b53c 100644 --- a/src/sys/ags_vsp.cpp +++ b/src/sys/ags_vsp.cpp @@ -28,7 +28,7 @@ void AGS::load_vsp(uint8* data, int page, int transparent) } // Zコマンドの処理 - if(nact->crc32 == CRC32_AMBIVALENZ_FD || nact->crc32 == CRC32_AMBIVALENZ_CD) { + if(nact->crc32_a == CRC32_AMBIVALENZ_FD || nact->crc32_a == CRC32_AMBIVALENZ_CD) { // Z 0,numを無視する } else { if(palette_bank != -1) { @@ -48,7 +48,7 @@ void AGS::load_vsp(uint8* data, int page, int transparent) } // パレット展開 - if(nact->crc32 == CRC32_FUNNYBEE_FD || nact->crc32 == CRC32_FUNNYBEE_CD || nact->crc32 == CRC32_FUNNYBEE_PATCH) { + if(nact->crc32_a == CRC32_FUNNYBEE_FD || nact->crc32_a == CRC32_FUNNYBEE_CD || nact->crc32_a == CRC32_FUNNYBEE_PATCH) { if(extract_palette_cg[page]) { for(int i = 0; i < 16; i++) { screen_palette[base + i] = program_palette[base + i]; diff --git a/src/sys/crc32.h b/src/sys/crc32.h index 19895be..559ede3 100644 --- a/src/sys/crc32.h +++ b/src/sys/crc32.h @@ -8,21 +8,46 @@ #define _CRC32_H_ // ADISK.DATの先頭256bytes +// SYSTEM1 -#define CRC32_CRESCENT 0x42351f2c // クレセントムーンがぁる +#define CRC32_BUNKASAI 0xc80f99b8 // あぶない文化祭前夜 +#define CRC32_CRESCENT 0x42351f2c // クレセントムーンがぁる #define CRC32_DPS 0x69ea4865 // D.P.S. - Dream Program System -#define CRC32_FUKEI 0x026de326 // 婦警さんVX (ALICEの館3 UNITBASE/Y_SYUREN.LZH) -#define CRC32_INTRUDER 0xa7520fb2 // Intruder -桜屋敷の探索- +#define CRC32_DPS_SG 0xab4cda48 // D.P.S. SG +#define CRC32_DPS_SG_FAHREN 0xe405d57c // D.P.S. SG - Fahren Fliegen +#define CRC32_DPS_SG_KATEI 0x23e67d18 // D.P.S. SG - 家庭教師はステキなお仕事 +#define CRC32_DPS_SG_NOBUNAGA 0x2ec116f2 // D.P.S. SG - 信長の淫謀 +#define CRC32_DPS_SG2 0xab4cda48 // D.P.S. SG set2 +#define CRC32_DPS_SG2_ANTIQUE 0x41fe8b3d // D.P.S. SG set2 - ANTIQUE HOUSE +#define CRC32_DPS_SG2_IKENAI 0x6b562c09 // D.P.S. SG set2 - いけない内科検診再び +#define CRC32_DPS_SG2_AKAI 0x1098e78c // D.P.S. SG set2 - 朱い夜 +#define CRC32_DPS_SG3 0xb77ae133 // D.P.S. SG SG set3 +#define CRC32_DPS_SG3_RABBIT 0xa3228b6c // D.P.S. SG set3 - Rabbit P4P +#define CRC32_DPS_SG3_SHINKON 0x09b4448a // D.P.S. SG set3 - しんこんさんものがたり +#define CRC32_DPS_SG3_SOTSUGYOU 0xbc4525d8 // D.P.S. SG set3 - 卒業 +#define CRC32_FUKEI 0x026de326 // 婦警さんVX +#define CRC32_INTRUDER 0xa7520fb2 // Intruder -桜屋敷の探索- #define CRC32_TENGU 0xc942ff58 // あぶないてんぐ伝説 -#define CRC32_VAMPIRE 0x957bcfbf // Little Vampire -#define CRC32_BUNKASAI 0 // あぶない文化祭前夜? (未確認) +#define CRC32_TOUSHIN_HINT 0xac337537 // 闘神都市 ヒントディスク +#define CRC32_VAMPIRE 0x957bcfbf // Little Vampire +#define CRC32_YAKATA 0x8cef6fa6 // ALICEの館 +// SYSTEM2 + +#define CRC32_AYUMI_FD 0x4e2fed2a // あゆみちゃん物語 (FD) +#define CRC32_AYUMI_HINT 0xf6bd963a // あゆみちゃん物語 ヒントディスク #define CRC32_AYUMI_PROTO 0x4e2f5678 // あゆみちゃん物語 PROTO -#define CRC32_SDPS 0xc7a20cdf // Super D.P.S -#define CRC32_SDPS_MARIA 0x80d4eaca // マリアとカンパン -#define CRC32_SDPS_TONO 0xbb1edff1 // 遠野の森 -#define CRC32_SDPS_KAIZOKU 0xf81829e3 // 海賊家業 +#define CRC32_DALK_HINT 0x4793b843 // DALK ヒントディスク +#define CRC32_DRSTOP 0x73fa86c4 // Dr. STOP! #define CRC32_PROSTUDENTG_FD 0x5ffbfee7 // Prostudent -G- (FD) +#define CRC32_RANCE3_HINT 0x8d5ec610 // Rance3 ヒントディスク +#define CRC32_SDPS 0xc7a20cdf // Super D.P.S +#define CRC32_SDPS_MARIA 0x80d4eaca // Super D.P.S - マリアとカンパン +#define CRC32_SDPS_TONO 0xbb1edff1 // Super D.P.S - 遠野の森 +#define CRC32_SDPS_KAIZOKU 0xf81829e3 // Super D.P.S - うれしたのし海賊稼業 +#define CRC32_YAKATA2 0x2df591ff // ALICEの館II + +// SYSTEM3 #define CRC32_AMBIVALENZ_FD 0xa6b48dfe // AmbivalenZ (FD) #define CRC32_AMBIVALENZ_CD 0x4b10db69 // AmbivalenZ (CD) @@ -42,7 +67,8 @@ #define CRC32_YAKATA3_CD 0x7f8f5e2a // アリスの館3 (CD) #define CRC32_YAKATA3_FD 0x58ebcc99 // アリスの館3 (FD) #define CRC32_HASHIRIONNA2 0x09f47cbd // 走り女2 (Rance 4.x ヒントディスク) -#define CRC32_TOUSHIN2_SP 0x2172c7b2 // 闘神都市2 〜そして、それから〜 +#define CRC32_TOUSHIN2_GD 0xb5eba798 // 闘神都市2 グラフィックディスク +#define CRC32_TOUSHIN2_SP 0x2172c7b2 // 闘神都市2 そして、それから… #define CRC32_OTOMESENKI 0x49a4db15 // 乙女戦記 #define CRC32_NINGYO 0xd491e7ab // 人魚 -蘿子- #define CRC32_MUGENHOUYOU 0xbb27d1ba // 夢幻泡影 diff --git a/src/sys/mako_midi.cpp b/src/sys/mako_midi.cpp index e8d1544..11f07b5 100644 --- a/src/sys/mako_midi.cpp +++ b/src/sys/mako_midi.cpp @@ -302,7 +302,7 @@ std::vector MAKOMidi::generate_smf(int current_max) w.send_3bytes(0xb0 + play[i].channel, 0x0a, play[i].pan); } else if(d0 == 0xec) { - if (nact->crc32 != CRC32_DPS) + if(!(nact->crc32_a == CRC32_DPS || nact->crc32_a == CRC32_DPS_SG || nact->crc32_a == CRC32_DPS_SG2 || nact->crc32_a == CRC32_DPS_SG3)) mute_flag = true; } else if(d0 == 0xf5) { @@ -570,7 +570,7 @@ void MAKOMidi::load_mda(int page) int size; uint8* data = NULL; if((data = dri->load(path, page, &size)) == NULL) { - data = dri->load_mda(nact->crc32, page, &size); + data = dri->load_mda(nact->crc32_a, page, &size); } if(data) { diff --git a/src/sys/nact.cpp b/src/sys/nact.cpp index d49c167..62af737 100644 --- a/src/sys/nact.cpp +++ b/src/sys/nact.cpp @@ -16,8 +16,8 @@ extern SDL_Window* g_window; // 初期化 -NACT::NACT(int sys_ver, uint32 crc32, const char* font_file, const char* playlist) - : sys_ver(sys_ver), crc32(crc32) +NACT::NACT(int sys_ver, uint32 crc32_a, uint32 crc32_b, const char* font_file, const char* playlist) + : sys_ver(sys_ver), crc32_a(crc32_a), crc32_b(crc32_b) { // デバッグコンソール起動 initialize_console(); @@ -44,7 +44,7 @@ NACT::NACT(int sys_ver, uint32 crc32, const char* font_file, const char* playlis delete fio; // ADISK.DAT - if (crc32 == CRC32_PROG_OMAKE) + if (crc32_a == CRC32_PROG_OMAKE) strcpy_s(adisk, 16, "AGAME.DAT"); else strcpy_s(adisk, 16, "ADISK.DAT"); @@ -295,8 +295,10 @@ void NACT::execute(T* impl) string[0] = cmd; string[1] = '\0'; ags->draw_text(string); - if(crc32 == CRC32_DPS && !ags->draw_menu) { - text_refresh = false; + if(crc32_a == CRC32_DPS || crc32_a == CRC32_DPS_SG || crc32_a == CRC32_DPS_SG2 || crc32_a == CRC32_DPS_SG3) { + if(!ags->draw_menu) { + text_refresh = false; + } } if(!ags->draw_menu && text_wait_enb && cmd != 0x20) { @@ -324,8 +326,10 @@ void NACT::execute(T* impl) string[1] = getd(); string[2] = '\0'; ags->draw_text(string); - if(crc32 == CRC32_DPS && !ags->draw_menu) { - text_refresh = false; + if(crc32_a == CRC32_DPS || crc32_a == CRC32_DPS_SG || crc32_a == CRC32_DPS_SG2 || crc32_a == CRC32_DPS_SG3) { + if(!ags->draw_menu) { + text_refresh = false; + } } if(!ags->draw_menu && text_wait_enb) { @@ -418,14 +422,15 @@ void NACT::fatal(const char* format, ...) { } NACT* NACT::create(const char* game_id, const char* font_file, const char* playlist) { - uint32 crc32 = NACT::calc_crc32(game_id); - int sys_ver = NACT::get_sys_ver(crc32); + uint32 crc32_a = NACT::calc_crc32("ADISK.DAT", game_id); + uint32 crc32_b = NACT::calc_crc32("BDISK.DAT", game_id); + int sys_ver = NACT::get_sys_ver(crc32_a, crc32_b); switch (sys_ver) { case 1: - return new NACT_Sys1(crc32, font_file, playlist); + return new NACT_Sys1(crc32_a, crc32_b, font_file, playlist); case 2: - return new NACT_Sys2(crc32, font_file, playlist); + return new NACT_Sys2(crc32_a, crc32_b, font_file, playlist); default: - return new NACT_Sys3(crc32, font_file, playlist); + return new NACT_Sys3(crc32_a, crc32_b, font_file, playlist); } } diff --git a/src/sys/nact.h b/src/sys/nact.h index 4231e94..45880a0 100644 --- a/src/sys/nact.h +++ b/src/sys/nact.h @@ -87,7 +87,7 @@ class NACT { public: static NACT* create(const char* game_id, const char* font_file, const char* playlist); - NACT(int sys_ver, uint32 crc32, const char* font_file, const char* playlist); + NACT(int sys_ver, uint32 crc32_a, uint32 crc32_b, const char* font_file, const char* playlist); virtual ~NACT(); protected: @@ -172,7 +172,7 @@ protected: #endif int mouse_x = 0, mouse_y = 0; - static uint32 calc_crc32(const char* game_id); + static uint32 calc_crc32(const char* file_name, const char* game_id); // Y27 ダイアログ void text_dialog(); @@ -193,13 +193,14 @@ public: void select_sound(int dev); const char* get_game_id(); - static const int get_sys_ver(uint32 crc32); + static const int get_sys_ver(uint32 crc32_a, uint32 crc32_b); const char* get_title(); bool text_skip_enb; // メッセージスキップ bool text_wait_enb; // テキスト表示のウェイト有効/無効 int sys_ver; - uint32 crc32; + uint32 crc32_a; // ADISK + uint32 crc32_b; // BDISK for D.P.S -SG- and Super D.P.S // for Y27 char tvar[10][22]; @@ -215,7 +216,7 @@ public: class NACT_Sys1 : public NACT { public: - NACT_Sys1(uint32 crc32, const char* font_file, const char* playlist); + NACT_Sys1(uint32 crc32_a, uint32 crc32_b, const char* font_file, const char* playlist); void cmd_calc(); void cmd_branch(); void cmd_label_jump(); @@ -258,8 +259,6 @@ private: uint16 cali(); uint16 cali2(); - int menu_max; // メニューの改ページ - // Intruder Zコマンド int paint_x; int paint_y; @@ -268,7 +267,7 @@ private: class NACT_Sys2 : public NACT { public: - NACT_Sys2(uint32 crc32, const char* font_file, const char* playlist); + NACT_Sys2(uint32 crc32_a, uint32 crc32_b, const char* font_file, const char* playlist); void cmd_calc(); void cmd_branch(); void cmd_label_jump(); @@ -314,7 +313,7 @@ private: class NACT_Sys3 : public NACT { public: - NACT_Sys3(uint32 crc32, const char* font_file, const char* playlist); + NACT_Sys3(uint32 crc32_a, uint32 crc32_b, const char* font_file, const char* playlist); void cmd_calc(); void cmd_branch(); void cmd_label_jump(); diff --git a/src/sys/nact_crc32.cpp b/src/sys/nact_crc32.cpp index 3826b79..28b1638 100644 --- a/src/sys/nact_crc32.cpp +++ b/src/sys/nact_crc32.cpp @@ -13,52 +13,72 @@ namespace { const struct CRCTable { const char* id; int sys_ver; - uint32 crc32; const char* title; + uint32 crc32_a; + uint32 crc32_b; } crc_table[] = { - {"crescent", 1, CRC32_CRESCENT, "クレセントムーンがぁる"}, - {"dps", 1, CRC32_DPS, "D.P.S - Dream Program System"}, - {"fukei", 1, CRC32_FUKEI, "婦警さんVX"}, - {"intruder", 1, CRC32_INTRUDER, "Intruder -桜屋敷の探索-"}, - {"tengu", 1, CRC32_TENGU, "あぶないてんぐ伝説"}, - {"little_vampire", 1, CRC32_VAMPIRE, "Little Vampire"}, + {"bunkasai", 1, "あぶない文化祭前夜", CRC32_BUNKASAI}, + {"crescent", 1, "クレセントムーンがぁる", CRC32_CRESCENT}, + {"dps", 1, "D.P.S - Dream Program System", CRC32_DPS}, + {"dps_sg_fahren", 1, "D.P.S SG - Fahren Fliegen", CRC32_DPS_SG, CRC32_DPS_SG_FAHREN}, + {"dps_sg_katei", 1, "D.P.S SG - 家庭教師はステキなお仕事", CRC32_DPS_SG, CRC32_DPS_SG_KATEI}, + {"dps_sg_nobunaga", 1, "D.P.S SG - 信長の淫謀", CRC32_DPS_SG, CRC32_DPS_SG_NOBUNAGA}, + {"dps_sg2_antique", 1, "D.P.S SG set2 - ANTIQUE HOUSE", CRC32_DPS_SG2, CRC32_DPS_SG2_ANTIQUE}, + {"dps_sg2_ikenai", 1, "D.P.S SG set2 - いけない内科検診再び", CRC32_DPS_SG2, CRC32_DPS_SG2_IKENAI}, + {"dps_sg2_akai", 1, "D.P.S SG set2 - 朱い夜", CRC32_DPS_SG2, CRC32_DPS_SG2_AKAI}, + {"dps_sg3_rabbit", 1, "D.P.S SG set3 - Rabbit P4P", CRC32_DPS_SG3, CRC32_DPS_SG3_RABBIT}, + {"dps_sg3_shinkon", 1, "D.P.S SG set3 - しんこんさんものがたり", CRC32_DPS_SG3, CRC32_DPS_SG3_SHINKON}, + {"dps_sg3_sotsugyou", 1, "D.P.S SG set3 - 卒業", CRC32_DPS_SG3, CRC32_DPS_SG3_SOTSUGYOU}, + {"fukei", 1, "婦警さんVX", CRC32_FUKEI}, + {"intruder", 1, "Intruder -桜屋敷の探索-", CRC32_INTRUDER}, + {"tengu", 1, "あぶないてんぐ伝説", CRC32_TENGU}, + {"toushin_hint", 1, "闘神都市 ヒントディスク", CRC32_TOUSHIN_HINT}, + {"little_vampire", 1, "Little Vampire", CRC32_VAMPIRE}, + {"yakata", 1, "ALICEの館", CRC32_YAKATA}, - {"ayumi_proto", 2, CRC32_AYUMI_PROTO, "あゆみちゃん物語 PROTO"}, - {"sdps_maria", 2, CRC32_SDPS_MARIA, "Super D.P.S"}, - {"sdps_tono", 2, CRC32_SDPS_TONO, "Super D.P.S"}, - {"sdps_kaizoku", 2, CRC32_SDPS_KAIZOKU, "Super D.P.S"}, - {"prog_fd", 2, CRC32_PROSTUDENTG_FD, "Prostudent G"}, + {"ayumi_fd", 2, "あゆみちゃん物語", CRC32_AYUMI_FD}, + {"ayumi_hint", 2, "あゆみちゃん物語 ヒントディスク", CRC32_AYUMI_HINT}, + {"ayumi_proto", 2, "あゆみちゃん物語 PROTO", CRC32_AYUMI_PROTO}, + {"dalk_hint", 2, "DALK ヒントディスク", CRC32_DALK_HINT}, + {"drstop", 2, "Dr. STOP!", CRC32_DRSTOP}, + {"prog_fd", 2, "Prostudent G", CRC32_PROSTUDENTG_FD}, + {"rance3_hint", 2, "Rance3 ヒントディスク", CRC32_RANCE3_HINT}, + {"sdps_maria", 2, "Super D.P.S - マリアとカンパン", CRC32_SDPS, CRC32_SDPS_MARIA}, + {"sdps_tono", 2, "Super D.P.S - 遠野の森", CRC32_SDPS, CRC32_SDPS_TONO}, + {"sdps_kaizoku", 2, "Super D.P.S - うれしたのし海賊稼業", CRC32_SDPS, CRC32_SDPS_KAIZOKU}, + {"yakata2", 2, "ALICEの館II", CRC32_YAKATA2}, - {"ambivalenz_fd", 3, CRC32_AMBIVALENZ_FD, "AmbivalenZ −二律背反−"}, - {"ambivalenz_cd", 3, CRC32_AMBIVALENZ_CD, "AmbivalenZ −二律背反−"}, - {"dps_all", 3, CRC32_DPSALL, "D.P.S. 全部"}, - {"funnybee_cd", 3, CRC32_FUNNYBEE_CD, "宇宙快盗ファニーBee"}, -// {"funnybee_patch", 3, CRC32_FUNNYBEE_PATCH, "宇宙快盗ファニーBee"}, - {"funnybee_fd", 3, CRC32_FUNNYBEE_FD, "宇宙快盗ファニーBee"}, - {"onlyyou", 3, CRC32_ONLYYOU, "Only You −世紀末のジュリエット達−"}, - {"onlyyou_demo", 3, CRC32_ONLYYOU_DEMO, "Only You −世紀末のジュリエット達− デモ版"}, - {"prog_cd", 3, CRC32_PROSTUDENTG_CD, "Prostudent G"}, - {"prog_omake", 3, CRC32_PROG_OMAKE, "Prostudent G おまけ"}, - {"rance41", 3, CRC32_RANCE41, "ランス 4.1 〜お薬工場を救え!〜"}, - {"rance42", 3, CRC32_RANCE42, "ランス 4.2 〜エンジェル組〜"}, - {"ayumi_cd", 3, CRC32_AYUMI_CD, "あゆみちゃん物語"}, - {"ayumi_live_256", 3, CRC32_AYUMI_JISSHA_256, "あゆみちゃん物語 実写版"}, - {"ayumi_live_full", 3, CRC32_AYUMI_JISSHA_FULL, "あゆみちゃん物語 フルカラー実写版"}, - {"yakata3_cd", 3, CRC32_YAKATA3_CD, "アリスの館3"}, - {"yakata3_fd", 3, CRC32_YAKATA3_FD, "アリスの館3"}, - {"hashirionna2", 3, CRC32_HASHIRIONNA2, "走り女2"}, - {"toushin2_sp", 3, CRC32_TOUSHIN2_SP, "闘神都市2 そして、それから…"}, - {"otome", 3, CRC32_OTOMESENKI, "乙女戦記"}, - {"ningyo", 3, CRC32_NINGYO, "人魚 -蘿子-"}, - {"mugen", 3, CRC32_MUGENHOUYOU, "夢幻泡影"}, + {"ambivalenz_fd", 3, "AmbivalenZ −二律背反−", CRC32_AMBIVALENZ_FD}, + {"ambivalenz_cd", 3, "AmbivalenZ −二律背反−", CRC32_AMBIVALENZ_CD}, + {"dps_all", 3, "D.P.S. 全部", CRC32_DPSALL}, + {"funnybee_cd", 3, "宇宙快盗ファニーBee", CRC32_FUNNYBEE_CD}, +// {"funnybee_patch", 3, "宇宙快盗ファニーBee", CRC32_FUNNYBEE_PATCH}, + {"funnybee_fd", 3, "宇宙快盗ファニーBee", CRC32_FUNNYBEE_FD}, + {"onlyyou", 3, "Only You −世紀末のジュリエット達−", CRC32_ONLYYOU}, + {"onlyyou_demo", 3, "Only You −世紀末のジュリエット達− デモ版", CRC32_ONLYYOU_DEMO}, + {"prog_cd", 3, "Prostudent G", CRC32_PROSTUDENTG_CD}, + {"prog_omake", 3, "Prostudent G おまけ", CRC32_PROG_OMAKE}, + {"rance41", 3, "ランス 4.1 〜お薬工場を救え!〜", CRC32_RANCE41}, + {"rance42", 3, "ランス 4.2 〜エンジェル組〜", CRC32_RANCE42}, + {"ayumi_cd", 3, "あゆみちゃん物語", CRC32_AYUMI_CD}, + {"ayumi_live_256", 3, "あゆみちゃん物語 実写版", CRC32_AYUMI_JISSHA_256}, + {"ayumi_live_full", 3, "あゆみちゃん物語 フルカラー実写版", CRC32_AYUMI_JISSHA_FULL}, + {"yakata3_cd", 3, "アリスの館3", CRC32_YAKATA3_CD}, + {"yakata3_fd", 3, "アリスの館3", CRC32_YAKATA3_FD}, + {"hashirionna2", 3, "走り女2", CRC32_HASHIRIONNA2}, + {"toushin2_gd", 3,"闘神都市2 グラフィックディスク", CRC32_TOUSHIN2_GD}, + {"toushin2_sp", 3, "闘神都市2 そして、それから…", CRC32_TOUSHIN2_SP}, + {"otome", 3, "乙女戦記", CRC32_OTOMESENKI}, + {"ningyo", 3, "人魚 -蘿子-", CRC32_NINGYO}, + {"mugen", 3, "夢幻泡影", CRC32_MUGENHOUYOU}, - {NULL, 0, 0, NULL}, + {NULL}, }; -const CRCTable* lookup(uint32 crc32) +const CRCTable* lookup(uint32 crc32_a, uint32 crc32_b) { for (const CRCTable* t = crc_table; t->id; t++) { - if (crc32 == t->crc32) + if (crc32_a == t->crc32_a && (!t->crc32_b || crc32_b == t->crc32_b)) return t; } return NULL; @@ -66,19 +86,19 @@ const CRCTable* lookup(uint32 crc32) } // namespace -uint32 NACT::calc_crc32(const char* game_id) +uint32 NACT::calc_crc32(const char* file_name, const char* game_id) { if (game_id) { for (const CRCTable* t = crc_table; t->id; t++) { if (strcmp(t->id, game_id) == 0) - return t->crc32; + return file_name[0] == 'A' ? t->crc32_a : t->crc32_b; } } uint32 crc = 0; FILEIO* fio = new FILEIO(); - if(fio->Fopen("ADISK.DAT", FILEIO_READ_BINARY)) { + if(fio->Fopen(file_name, FILEIO_READ_BINARY)) { uint32 table[256]; for(int i = 0; i < 256; i++) { uint32 c = i; @@ -100,56 +120,27 @@ uint32 NACT::calc_crc32(const char* game_id) } fio->Fclose(); } - if(crc == CRC32_SDPS) { - // Super D.P.Sの場合はBDISK.DATのCRCを取る - if(fio->Fopen("BDISK.DAT", FILEIO_READ_BINARY)) { - uint32 table[256]; - for(int i = 0; i < 256; i++) { - uint32 c = i; - for(int j = 0; j < 8; j++) { - if(c & 1) { - c = (c >> 1) ^ 0xedb88320; - } else { - c >>= 1; - } - } - table[i] = c; - } - // BDISK.DATの先頭256bytes - crc = 0; - for(int i = 0; i < 256; i++) { - int d = fio->Fgetc(); - uint32 c = ~crc; - c = table[(c ^ d) & 0xff] ^ (c >> 8); - crc = ~c; - } - fio->Fclose(); - } - } delete fio; -#if 0 - printf("CRC: %x\n", crc); -#endif return crc; } const char* NACT::get_game_id() { - if (const CRCTable* entry = lookup(crc32)) + if (const CRCTable* entry = lookup(crc32_a, crc32_b)) return entry->id; return NULL; } -const int NACT::get_sys_ver(uint32 crc32) +const int NACT::get_sys_ver(uint32 crc32_a, uint32 crc32_b) { - if (const CRCTable* entry = lookup(crc32)) + if (const CRCTable* entry = lookup(crc32_a, crc32_b)) return entry->sys_ver; return 3; } const char* NACT::get_title() { - if (const CRCTable* entry = lookup(crc32)) + if (const CRCTable* entry = lookup(crc32_a, crc32_b)) return entry->title; return NULL; } diff --git a/src/sys/nact_sys1.cpp b/src/sys/nact_sys1.cpp index 69616d8..8ea6f2a 100644 --- a/src/sys/nact_sys1.cpp +++ b/src/sys/nact_sys1.cpp @@ -17,6 +17,9 @@ #include "crc32.h" #include "../fileio.h" +// メニューの改ページ +#define MENU_MAX (crc32_a == CRC32_INTRUDER ? 6 : 11) + #define WAIT(tm) \ { \ Uint32 dwTime = SDL_GetTicks() + (tm); \ @@ -60,12 +63,14 @@ } \ } -NACT_Sys1::NACT_Sys1(uint32 crc32, const char* font_file, const char* playlist) - : NACT(1, crc32, font_file, playlist) +NACT_Sys1::NACT_Sys1(uint32 crc32_a, uint32 crc32_b, const char* font_file, const char* playlist) + : NACT(1, crc32_a, crc32_b, font_file, playlist) { - menu_max = 6; - switch (crc32) { + switch (crc32_a) { case CRC32_DPS: + case CRC32_DPS_SG: + //case CRC32_DPS_SG2: + case CRC32_DPS_SG3: text_refresh = false; strcpy_s(tvar[0], 22, "\x83\x4A\x83\x58\x83\x5E\x83\x80"); // "カスタム" in SJIS strcpy_s(tvar[1], 22, "\x83\x8A\x81\x5B\x83\x69\x83\x58"); // "リーナス" in SJIS @@ -76,7 +81,6 @@ NACT_Sys1::NACT_Sys1(uint32 crc32, const char* font_file, const char* playlist) strcpy_s(tvar[6], 22, "\x90\x5E\x97\x9D\x8E\x71"); // "真理子" in SJIS break; case CRC32_INTRUDER: - menu_max = 11; paint_x = paint_y = map_page = 0; break; } @@ -84,7 +88,7 @@ NACT_Sys1::NACT_Sys1(uint32 crc32, const char* font_file, const char* playlist) void NACT_Sys1::opening() { - switch (crc32) { + switch (crc32_a) { case CRC32_CRESCENT: mako->play_music(2); ags->load_cg(1, -1); @@ -316,8 +320,10 @@ void NACT_Sys1::cmd_open_menu() return; } - if(crc32 == CRC32_DPS && !text_refresh) { - cmd_a(); + if(crc32_a == CRC32_DPS || crc32_a == CRC32_DPS_SG || crc32_a == CRC32_DPS_SG2 || crc32_a == CRC32_DPS_SG3) { + if(!text_refresh) { + cmd_a(); + } } // クリック中の間は待機 @@ -472,7 +478,7 @@ top: ags->menu_dest_y = 0; ags->draw_menu = true; - if(cnt <= menu_max) { + if(cnt <= MENU_MAX) { // 1ページ内に全て表示できる for(int i = 0; i < MAX_VERB; i++) { if(chk[i]) { @@ -494,7 +500,7 @@ top2: ags->menu_dest_y += ags->menu_font_size + 2; } page = i + 1; - if(index == menu_max - 1) { + if(index == MENU_MAX - 1) { break; } } @@ -647,7 +653,7 @@ top: ags->menu_dest_y = 0; ags->draw_menu = true; - if(cnt <= menu_max - 1) { + if(cnt <= MENU_MAX - 1) { // 1ページ内に全て表示できる for(int i = 0; i < MAX_OBJ; i++) { if(chk[i]) { @@ -675,7 +681,7 @@ top2: ags->menu_dest_y += ags->menu_font_size + 2; } page = i + 1; - if(index == menu_max - 2) { + if(index == MENU_MAX - 2) { break; } } @@ -832,8 +838,9 @@ void NACT_Sys1::cmd_a() // ウィンドウ更新 ags->clear_text_window(text_window, true); - if (crc32 == CRC32_DPS) + if(crc32_a == CRC32_DPS || crc32_a == CRC32_DPS_SG || crc32_a == CRC32_DPS_SG2 || crc32_a == CRC32_DPS_SG3) { text_refresh = true; + } } void NACT_Sys1::cmd_b() @@ -867,13 +874,13 @@ void NACT_Sys1::cmd_g() output_console("\nG %d:", page); - if (crc32 == CRC32_INTRUDER) { + if(crc32_a == CRC32_INTRUDER) { page = (page == 97) ? 96 : (page == 98) ? 97 : page; } ags->load_cg(page, -1); - if (crc32 == CRC32_INTRUDER) { + if(crc32_a == CRC32_INTRUDER) { if(page == 94) { WAIT(400); } @@ -1169,7 +1176,7 @@ void NACT_Sys1::cmd_u() output_console("\nU %d,%d:", page, transparent); - if (crc32 == CRC32_INTRUDER) { + if(crc32_a == CRC32_INTRUDER) { ags->load_cg(page, 11); if(page == 5) { @@ -1210,7 +1217,7 @@ void NACT_Sys1::cmd_y() output_console("\nY %d,%d:", cmd, param); - switch (crc32) { + switch (crc32_a) { case CRC32_BUNKASAI: case CRC32_CRESCENT: case CRC32_DPS: @@ -1244,7 +1251,7 @@ void NACT_Sys1::cmd_y() } break; case 2: - switch (crc32) { + switch (crc32_a) { case CRC32_CRESCENT: for(int i = 39; i <= 48; i++) var[i] = 0; @@ -1266,12 +1273,12 @@ void NACT_Sys1::cmd_y() RND = (param == 0 || param == 1) ? 0 : random(param); break; case 7: - if(crc32 == CRC32_DPS && param == 1) { + if(crc32_a == CRC32_DPS && param == 1) { ags->box_fill(0, 40, 8, 598, 270, 0); } break; case 130: - if (crc32 == CRC32_TENGU) { + if (crc32_a == CRC32_TENGU) { WAIT(2000) ags->load_cg(180, -1); @@ -1306,7 +1313,7 @@ void NACT_Sys1::cmd_y() RND = 0; break; case 255: - if (crc32 == CRC32_DPS) + if (crc32_a == CRC32_DPS) post_quit = false; else post_quit = true; @@ -1366,7 +1373,7 @@ void NACT_Sys1::cmd_y() void NACT_Sys1::cmd_z() { - if (crc32 == CRC32_CRESCENT) { + if (crc32_a == CRC32_CRESCENT) { cmd_y(); return; } @@ -1375,7 +1382,7 @@ void NACT_Sys1::cmd_z() output_console("\nZ %d,%d:", cmd, param); - switch (crc32) { + switch (crc32_a) { case CRC32_INTRUDER: if(cmd == 1 && 1 <= param && param <= 4) { const char* buf[4] = { diff --git a/src/sys/nact_sys2.cpp b/src/sys/nact_sys2.cpp index a9e2034..3739e7d 100644 --- a/src/sys/nact_sys2.cpp +++ b/src/sys/nact_sys2.cpp @@ -55,8 +55,8 @@ } \ } -NACT_Sys2::NACT_Sys2(uint32 crc32, const char* font_file, const char* playlist) - : NACT(2, crc32, font_file, playlist) +NACT_Sys2::NACT_Sys2(uint32 crc32_a, uint32 crc32_b, const char* font_file, const char* playlist) + : NACT(2, crc32_a, crc32_b, font_file, playlist) { } @@ -790,7 +790,7 @@ void NACT_Sys2::cmd_b() ags->menu_w[index - 1].screen = NULL; } } else if(cmd == 2) { -// if(crc32 == CRC32_PROSTUDENTG_FD) { +// if(crc32_a == CRC32_PROSTUDENTG_FD) { // ags->menu_w[index - 1].frame = (index == 1 || index == 3) ? true : false; // } else ags->menu_w[index - 1].frame = p1 ? true : false; @@ -815,7 +815,7 @@ void NACT_Sys2::cmd_b() } else if(cmd == 4) { if(p5 == 0) { // ウィンドウ退避 -// if(crc32 == CRC32_PROSTUDENTG_FD) { +// if(crc32_a == CRC32_PROSTUDENTG_FD) { // ags->text_w[index - 1].frame = (index == 1 || index == 3) ? true : false; // } else ags->text_w[index - 1].frame = p1 ? true : false; @@ -864,7 +864,7 @@ void NACT_Sys2::cmd_g() output_console("\nG %d:", page); - if(crc32 == CRC32_SDPS_TONO || crc32 == CRC32_SDPS_KAIZOKU) { + if(crc32_a == CRC32_SDPS && (crc32_b == CRC32_SDPS_TONO || crc32_b == CRC32_SDPS_KAIZOKU)) { if(20 <= page && page <= 100) { page--; } @@ -1308,7 +1308,7 @@ void NACT_Sys2::cmd_y() RND = (param == 0 || param == 1) ? 0 : random(param); break; case 7: - if(crc32 != CRC32_SDPS_MARIA) { + if(!(crc32_a == CRC32_SDPS && crc32_b == CRC32_SDPS_MARIA)) { ags->draw_box(param); } break; diff --git a/src/sys/nact_sys3.cpp b/src/sys/nact_sys3.cpp index 1a2999f..4013d46 100644 --- a/src/sys/nact_sys3.cpp +++ b/src/sys/nact_sys3.cpp @@ -13,8 +13,8 @@ #include "../fileio.h" #include "texthook.h" -NACT_Sys3::NACT_Sys3(uint32 crc32, const char* font_file, const char* playlist) - : NACT(3, crc32, font_file, playlist) +NACT_Sys3::NACT_Sys3(uint32 crc32_a, uint32 crc32_b, const char* font_file, const char* playlist) + : NACT(3, crc32_a, crc32_b, font_file, playlist) { } @@ -431,10 +431,9 @@ void NACT_Sys3::cmd_b() if(cmd == 1) { // あゆみちゃん物語 - if(crc32 == CRC32_AYUMI_CD || crc32 == CRC32_AYUMI_JISSHA_256 || crc32 == CRC32_AYUMI_JISSHA_FULL) { + if(crc32_a == CRC32_AYUMI_CD || crc32_a == CRC32_AYUMI_JISSHA_256 || crc32_a == CRC32_AYUMI_JISSHA_FULL) { p5 = 1; } - ags->menu_w[index - 1].sx = column ? p1 * 8 : p1 & 0xfff8; ags->menu_w[index - 1].sy = p2; ags->menu_w[index - 1].ex = column ? p3 * 8 - 1 : (p3 & 0xfff8) - 1; @@ -469,7 +468,7 @@ void NACT_Sys3::cmd_b() } else if(cmd == 4) { if(p5 == 0) { // ウィンドウ退避 - if(crc32 == CRC32_PROSTUDENTG_CD && p4) { + if(crc32_a == CRC32_PROSTUDENTG_CD && p4) { // prostudent G オープニング画面化け対策 if(ags->text_w[index - 1].window) { free(ags->text_w[index - 1].window); @@ -586,7 +585,7 @@ void NACT_Sys3::cmd_i() // X方向はカラム単位で切り捨て sx = column ? sx * 8 : sx & 0xfff8; - ex = column ? ex * 8 - 1 : (crc32 == CRC32_NINGYO) ? (ex & 0xfff8) + 7 : (ex & 0xfff8) - 1; + ex = column ? ex * 8 - 1 : (crc32_a == CRC32_NINGYO) ? (ex & 0xfff8) + 7 : (ex & 0xfff8) - 1; dx = column ? dx * 8 : dx & 0xfff8; ags->copy(sx, sy, ex, ey, dx, dy); } @@ -1075,7 +1074,7 @@ void NACT_Sys3::cmd_u() output_console("\nU %d,%d:", page, transparent); - if(crc32 == CRC32_RANCE41 || crc32 == CRC32_RANCE42) { + if(crc32_a == CRC32_RANCE41 || crc32_a == CRC32_RANCE42) { transparent = (transparent == 28) ? 12 : transparent; } ags->load_cg(page, transparent); @@ -1413,7 +1412,7 @@ void NACT_Sys3::cmd_y() case 231: D01 = 640; D02 = (param == 1) ? ags->screen_height : 480; - D03 = (crc32 == CRC32_YAKATA3_FD) ? 16 : 256; + D03 = (crc32_a == CRC32_YAKATA3_FD) ? 16 : 256; break; case 232: if(ags->screen_height != param ? 480 : 400) { @@ -1500,13 +1499,13 @@ void NACT_Sys3::cmd_y() column = param ? false : true; break; case 252: - RND = (crc32 == CRC32_YAKATA3_FD) ? 4 : 8; + RND = (crc32_a == CRC32_YAKATA3_FD) ? 4 : 8; break; case 253: show_push = (param == 0) ? true : false; break; case 254: - RND = (crc32 == CRC32_YAKATA3_CD || crc32 == CRC32_YAKATA3_FD || crc32 == CRC32_NINGYO) ? 1 : 0; + RND = (crc32_a == CRC32_YAKATA3_CD || crc32_a == CRC32_YAKATA3_FD || crc32_a == CRC32_NINGYO) ? 1 : 0; break; case 255: post_quit = (param == 1) ? true : false; From 6d39b6feee929497bcabd13b9f892f9d68e9b8f7 Mon Sep 17 00:00:00 2001 From: kichikuou Date: Fri, 22 May 2020 19:39:47 +0900 Subject: [PATCH 05/14] Merge upstream changes: Merge DRI changes - Fail if file entry's size is 0 - load_mda() can now load MDA from subsequent disks. --- src/sys/dri.cpp | 159 +++++++++++++++++++++++++++++++++++++++--- src/sys/dri.h | 4 +- src/sys/mako_midi.cpp | 2 +- 3 files changed, 153 insertions(+), 12 deletions(-) diff --git a/src/sys/dri.cpp b/src/sys/dri.cpp index 4197a2e..df87973 100644 --- a/src/sys/dri.cpp +++ b/src/sys/dri.cpp @@ -62,24 +62,86 @@ uint8* DRI::load(const char* file_name, int page, int* size) int end_sector = fio->Fgetc(); end_sector |= fio->Fgetc() << 8; - int buffer_size = (end_sector - start_sector) * 256; - uint8* buffer = (uint8*)malloc(buffer_size); + if((*size = (end_sector - start_sector) * 256) == 0) { + // サイズ不正 + fio->Fclose(); + delete fio; + return NULL; + } + + uint8 *buffer = (uint8 *)malloc(*size); fio->Fseek((start_sector - 1) * 256, FILEIO_SEEK_SET); fio->Fread(buffer, 256, end_sector - start_sector); fio->Fclose(); delete fio; - *size = buffer_size; return buffer; } -uint8* DRI::load_mda(uint32 crc32, int page, int* size) +uint8* DRI::load_mda(uint32 crc32_a, uint32 crc32_b, int page, int* size) { // データ取得 const char* fname = NULL; - switch(crc32) { + switch(crc32_a) { + case CRC32_BUNKASAI: // あぶない文化祭前夜 + fname = "AMUS_AB.MDA"; + break; + case CRC32_CRESCENT: // クレセントムーンがぁる + fname = "AMUS_CRS.MDA"; + break; + case CRC32_DPS: // D.P.S. - Dream Program System + fname = "AMUS_DPS.MDA"; + break; + case CRC32_DPS_SG: // D.P.S. SG +// case CRC32_DPS_SG2: // D.P.S. SG set2 + case CRC32_DPS_SG3: // D.P.S. SG set2 + fname = "AMUS_SG.MDA"; + break; + case CRC32_FUKEI: // 婦警さんVX + fname = "AMUS_VX.MDA"; + break; + case CRC32_INTRUDER: // Intruder -桜屋敷の探索- + fname = "AMUS_INT"; + break; + case CRC32_TENGU: // あぶないてんぐ伝説 + fname = "AMUS_AT"; + break; + case CRC32_TOUSHIN_HINT: // 闘神都市 ヒントディスク + fname = "AMUS_T1"; + break; + case CRC32_VAMPIRE: // Little Vampire + fname = "AMUS_LP2"; + break; + case CRC32_YAKATA: // ALICEの館 + fname = "AMUS_AL1"; + break; + + case CRC32_AYUMI_FD: // あゆみちゃん物語 (FD) + case CRC32_AYUMI_HINT: // あゆみちゃん物語 ヒントディスク + case CRC32_AYUMI_PROTO: // あゆみちゃん物語 PROTO + fname = "AMUS_AYM"; + break; + case CRC32_DALK_HINT: // DALK ヒントディスク + fname = "AMUS_DLK"; + break; + case CRC32_DRSTOP: // Dr. STOP! + fname = "AMUS_DRS"; + break; + case CRC32_PROSTUDENTG_FD: // Prostudent -G- (FD) + fname = "AMUS_PSG"; + break; + case CRC32_RANCE3_HINT: // Rance3 ヒントディスク + fname = "AMUS_R3H"; + break; + case CRC32_SDPS: // Super D.P.S + fname = "AMUS_SDP"; + break; + case CRC32_YAKATA2: // ALICEの館II + fname = "AMUS_AL2"; + break; + case CRC32_AMBIVALENZ_FD: // AmbivalenZ (FD) case CRC32_AMBIVALENZ_CD: // AmbivalenZ (CD) fname = "AMUS_AMB.MDA"; @@ -117,6 +179,9 @@ uint8* DRI::load_mda(uint32 crc32, int page, int* size) case CRC32_HASHIRIONNA2: // 走り女2 (Rance 4.x ヒントディスク) fname = "AMUS_RG2.MDA"; break; + case CRC32_TOUSHIN2_GD: // 闘神都市2 グラフィックディスク + fname = "AMUS_T2"; + break; case CRC32_OTOMESENKI: // 乙女戦記 fname = "AMUS_OTM.MDA"; break; @@ -141,6 +206,7 @@ uint8* DRI::load_mda(uint32 crc32, int page, int* size) if(page > (data_sector - link_sector) * 128 - 1) { // ページ番号不正 + fclose(fp); return NULL; } @@ -151,6 +217,79 @@ uint8* DRI::load_mda(uint32 crc32, int page, int* size) if(disk_index == 0 || disk_index == 0x1a) { // 欠番 + fclose(fp); + return NULL; + } + + // AMUS.MDA以外にリンクされている場合はリソースを開き直す + if(disk_index == 2) { + fclose(fp); + switch(crc32_b) { + case CRC32_DPS_SG_FAHREN: // D.P.S. SG - Fahren Fliegen + fname = "BMUS_FAH"; + break; + case CRC32_DPS_SG_KATEI: // D.P.S. SG - 家庭教師はステキなお仕事 + fname = "BMUS_KAT"; + break; + case CRC32_DPS_SG_NOBUNAGA: // D.P.S. SG - 信長の淫謀 + fname = "BMUS_NOB"; + break; + case CRC32_DPS_SG2_ANTIQUE: // D.P.S. SG set2 - ANTIQUE HOUSE + fname = "BMUS_ANT"; + break; + case CRC32_DPS_SG2_IKENAI: // D.P.S. SG set2 - いけない内科検診再び + fname = "BMUS_NAI"; + break; + case CRC32_DPS_SG2_AKAI: // D.P.S. SG set2 - 朱い夜 + fname = "BMUS_AKA"; + break; + case CRC32_DPS_SG3_RABBIT: // D.P.S. SG set3 - Rabbit P4P + fname = "BMUS_RAB"; + break; + case CRC32_DPS_SG3_SHINKON: // D.P.S. SG set3 - しんこんさんものがたり + fname = "BMUS_SIN"; + break; + case CRC32_DPS_SG3_SOTSUGYOU: // D.P.S. SG set3 - 卒業 + fname = "BMUS_SOT"; + break; + case CRC32_SDPS_MARIA: // Super D.P.S - マリアとカンパン + fname = "BMUS_MTK"; + break; + case CRC32_SDPS_TONO: // Super D.P.S - 遠野の森 + fname = "BMUS_TNM"; + break; + case CRC32_SDPS_KAIZOKU: // Super D.P.S - うれしたのし海賊稼業 + fname = "BMUS_KAM"; + break; + default: + fname = NULL; + break; + } + if(fname == NULL) { + return NULL; + } + fp = fopen(fname, "rb"); + if (!fp) + return NULL; + } else if(disk_index == 3) { + fclose(fp); + switch(crc32_a) { + case CRC32_TOUSHIN_HINT: // 闘神都市 ヒントディスク + fname = "CMUS_T1"; + break; + default: + fname = NULL; + break; + } + if(fname == NULL) { + return NULL; + } + fp = fopen(fname, "rb"); + if (!fp) + return NULL; + } else if(disk_index != 1) { + // AMUS.MDA以外にリンクされている場合は失敗 + fclose(fp); return NULL; } @@ -160,14 +299,16 @@ uint8* DRI::load_mda(uint32 crc32, int page, int* size) int start_sector = buf[0] | (buf[1] << 8); int end_sector = buf[2] | (buf[3] << 8); - int buffer_size = (end_sector - start_sector) * 256; - uint8* buffer = (uint8*)malloc(buffer_size); + if((*size = (end_sector - start_sector) * 256) == 0) { + // サイズ不正 + return NULL; + } + uint8* buffer = (uint8*)malloc(*size); fseek(fp, (start_sector - 1) * 256, SEEK_SET); - fread(buffer, buffer_size, 1, fp); + fread(buffer, *size, 1, fp); fclose(fp); - *size = buffer_size; return buffer; } diff --git a/src/sys/dri.h b/src/sys/dri.h index ef6a41a..473b910 100644 --- a/src/sys/dri.h +++ b/src/sys/dri.h @@ -15,8 +15,8 @@ public: DRI() {} ~DRI() {} - uint8* load(const char* path, int page, int* size); - uint8* load_mda(uint32 crc32, int page, int* size); + uint8* load(const char* file_name, int page, int* size); + uint8* load_mda(uint32 crc32_a, uint32 crc32_b, int page, int* size); }; #endif diff --git a/src/sys/mako_midi.cpp b/src/sys/mako_midi.cpp index 11f07b5..549d358 100644 --- a/src/sys/mako_midi.cpp +++ b/src/sys/mako_midi.cpp @@ -570,7 +570,7 @@ void MAKOMidi::load_mda(int page) int size; uint8* data = NULL; if((data = dri->load(path, page, &size)) == NULL) { - data = dri->load_mda(nact->crc32_a, page, &size); + data = dri->load_mda(nact->crc32_a, nact->crc32_b, page, &size); } if(data) { From c6fce5144b9c5eb164a91496f37fe0318e827432 Mon Sep 17 00:00:00 2001 From: kichikuou Date: Fri, 22 May 2020 22:16:50 +0900 Subject: [PATCH 06/14] Merge upstream changes: Add MDA files These files are not actually used yet. (See issue #1) --- src/res3/AMUS_AB.MDA | Bin 0 -> 2816 bytes src/res3/AMUS_AL1.MDA | Bin 0 -> 2560 bytes src/res3/AMUS_AL2.MDA | Bin 0 -> 46592 bytes src/res3/AMUS_AT.MDA | Bin 0 -> 3072 bytes src/res3/AMUS_CRS.MDA | Bin 0 -> 5376 bytes src/res3/AMUS_DLK.MDA | Bin 0 -> 6144 bytes src/res3/AMUS_DPS.MDA | Bin 0 -> 2048 bytes src/res3/AMUS_DRS.MDA | Bin 0 -> 4864 bytes src/res3/AMUS_INT.MDA | Bin 0 -> 3328 bytes src/res3/AMUS_KNG.MDA | Bin 0 -> 8192 bytes src/res3/AMUS_LP2.MDA | Bin 0 -> 2816 bytes src/res3/AMUS_R3H.MDA | Bin 0 -> 10496 bytes src/res3/AMUS_R4.MDA | Bin 0 -> 11776 bytes src/res3/AMUS_SDP.MDA | Bin 0 -> 1280 bytes src/res3/AMUS_SG.MDA | Bin 0 -> 1280 bytes src/res3/AMUS_T1.MDA | Bin 0 -> 3840 bytes src/res3/AMUS_VX.MDA | Bin 0 -> 1280 bytes src/res3/BMUS_AKA.MDA | Bin 0 -> 1536 bytes src/res3/BMUS_ANT.MDA | Bin 0 -> 1792 bytes src/res3/BMUS_FAH.MDA | Bin 0 -> 1536 bytes src/res3/BMUS_KAM.MDA | Bin 0 -> 1536 bytes src/res3/BMUS_KAT.MDA | Bin 0 -> 1536 bytes src/res3/BMUS_MTK.MDA | Bin 0 -> 1536 bytes src/res3/BMUS_NAI.MDA | Bin 0 -> 1792 bytes src/res3/BMUS_NOB.MDA | Bin 0 -> 1536 bytes src/res3/BMUS_RAB.MDA | Bin 0 -> 2304 bytes src/res3/BMUS_SIN.MDA | Bin 0 -> 2048 bytes src/res3/BMUS_SOT.MDA | Bin 0 -> 2304 bytes src/res3/BMUS_TNM.MDA | Bin 0 -> 1536 bytes src/res3/CMUS_T1.MDA | Bin 0 -> 3584 bytes 30 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/res3/AMUS_AB.MDA create mode 100644 src/res3/AMUS_AL1.MDA create mode 100644 src/res3/AMUS_AL2.MDA create mode 100644 src/res3/AMUS_AT.MDA create mode 100644 src/res3/AMUS_CRS.MDA create mode 100644 src/res3/AMUS_DLK.MDA create mode 100644 src/res3/AMUS_DPS.MDA create mode 100644 src/res3/AMUS_DRS.MDA create mode 100644 src/res3/AMUS_INT.MDA create mode 100644 src/res3/AMUS_KNG.MDA create mode 100644 src/res3/AMUS_LP2.MDA create mode 100644 src/res3/AMUS_R3H.MDA create mode 100644 src/res3/AMUS_R4.MDA create mode 100644 src/res3/AMUS_SDP.MDA create mode 100644 src/res3/AMUS_SG.MDA create mode 100644 src/res3/AMUS_T1.MDA create mode 100644 src/res3/AMUS_VX.MDA create mode 100644 src/res3/BMUS_AKA.MDA create mode 100644 src/res3/BMUS_ANT.MDA create mode 100644 src/res3/BMUS_FAH.MDA create mode 100644 src/res3/BMUS_KAM.MDA create mode 100644 src/res3/BMUS_KAT.MDA create mode 100644 src/res3/BMUS_MTK.MDA create mode 100644 src/res3/BMUS_NAI.MDA create mode 100644 src/res3/BMUS_NOB.MDA create mode 100644 src/res3/BMUS_RAB.MDA create mode 100644 src/res3/BMUS_SIN.MDA create mode 100644 src/res3/BMUS_SOT.MDA create mode 100644 src/res3/BMUS_TNM.MDA create mode 100644 src/res3/CMUS_T1.MDA diff --git a/src/res3/AMUS_AB.MDA b/src/res3/AMUS_AB.MDA new file mode 100644 index 0000000000000000000000000000000000000000..fce0edc84a4ad65ef22e96f47c2dc2da65e681db GIT binary patch literal 2816 zcmd^=&ubGw6vw|avy)w$C@l(#hjwdA*|fw&TWg}N&h`hi5K&ADr56_rUW5u>^dLfW z>%l`oJ&Q*V9=&)L^eE`RAow4M`0LH=PSed+QIQhqJM4S&X4sj}`!U1eKq3bh9uA-n zc@%IE`$rgKoC)SI$#TqP-tql|Zb-vRD~)U6+{uNo>7%S&gTvrI4?_D%`(68W`{|<> zn=c={-@5$xqi-avH!73W>e=$u#pUMGO2ZFM)oRnFO0_guDaK1u-y64X`x|$%f7`g5 zT9z3ETOZoZhp%?~WoGT~IJh9-3)hvD!f~7qx94)y)@EkvKGIszntY2U6c{`*R7CL# z*NsQuL@NlUB5JA;GL(Y+irC0~PYi+4F-!z}VqA4eXZO9c4FB^2@yj&7?9duic`odNReQ(ytDU$*`9D)eVoh-{W76ILrF~WNCq)jWqEvb*M*oQz z{=T%7ataLlW*fm~TYO18jx7XwTd8ZNeB?eQQ!WOz zN5NxPD8Q=`y}L{CPJLkOCggc6l83f%F*Jr^z>bZIq7r8=N{qP0dMeg5pdyi`w|YUJDWd$(#)o5OQ`(-Ji?AM{!*6%W4!s6o&t*uD)opNYIrote6lw(?mOt=u8-)8ci@TStOG{$Rk0^Gn&%wZnaX)(q) zbC_T*^O%36WcS~yBgR<3Aj)G-&&co4Wo1#>c6T literal 0 HcmV?d00001 diff --git a/src/res3/AMUS_AL2.MDA b/src/res3/AMUS_AL2.MDA new file mode 100644 index 0000000000000000000000000000000000000000..45a0dd18db3fd50c776b500cbbad387005fec88b GIT binary patch literal 46592 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 mR`+ys7WAO+e;4_e_(znS#edb!M4gx z{Pa`adH(jWM^^U!%LE@MU~|VPC8U&n?x@bu+F4)U)CjYoJ&i6c7%)UMFd5Y=z3*lO z&UE8=B_mUvrGYU}Ki~(oU&TP++<7!(-kdiB(SQ5@8}SD5i`P|t$&qwpiy3B3-!?}J z#Ky2;`3>Phm@YxhOBMu9>($k;#OOeI*LS$L0 zExpw0@>O*u9m1mU3DW=lewCkd)OMWAK2sgsJ>_VIx_#U77fnuTX8{}4Xhg#Ce|>yd z|3@?4|6w)+RssM?|kQRM^T&-)J5IoP!IJ| zl2VkWKFUy*`e}d$X^2kHNjgQx)0kOtjN_c(F79TBd$^aAoZ>Y1afY+p&jZ896J1j+ z-rg+TTUswoE-!A-5|*5;F;YhZSJ$d9s^#i_^+EOd-reeco4sedh~5ao>2+f z8XNuRC1SC7JRWj8aYa+x`GulKEuOO53kyY;n8vpA`B@L~n#YRgQ|yqi;>k)ON7FcJ zwD9?za-@>rUpen35{X9s82HQJcfl_nambc|?c>cYHdFs2V1qWmW}1iqGYD#?Qs963 z$%`GKKj^gn;?EgviEfD6qJK&bL~Y0FPkrVTHR>*Rcc!T{`2VgM{pA(W5XBtmKZ5)R zrt!XN-79IWh28rw(yr=<}f zL|&7bpmp%C%7Xvpa4SFNzi#uMZTErq0i)-?hyHI1LD8h>?}qa~M#DME8#c6<|E4pT`6sE-;k2!xSN-5W_#E#4>iWN^EA=k*U++!+ z`_Nw^1lbk2_R{F_4}gE?mltcZ|68?1-P8xj(Pi&~U$8MD6v?GBDx$~lfdAbeGm*v)RsiXE-bQe+HLCQ~w_D z7k;$XziQIovu)o;5Js>u1U6Hb?FG(P)%D0X2VW#_)?~0l!j?oqxs)H>{Tb!XIpeu%V*avu^s_p;nwx^~)M@xL5{0FPAK+OOE literal 0 HcmV?d00001 diff --git a/src/res3/AMUS_DLK.MDA b/src/res3/AMUS_DLK.MDA new file mode 100644 index 0000000000000000000000000000000000000000..b72c42743f77d652c24ff4ed34bcee03834e67fb GIT binary patch literal 6144 zcmds*yKfv-6vofF^YA#{#CFz6)^QSUFqpMhYp>-%65%LgWF!!dkZ>#|ZWsxN0;GUw zpddxIvxJCvh;)dCf|>?8goGdxB?aOSprNNAkI!bk#qGNQNPEdoU=_EaAiny6d!x?*hR~=D_fgyu5Y}yxW0CkZpk})nv~e`wfp^@yPv<*{eAcS zyVpOt|3#+VTHDy{tX#Noe(8;uU%mRu)~0SQU%dE2yK}z1(wX;%a`x@_KG3&6?7r2_ zy6<-1x&2Y@(POvG&;DLs{_>ZyuYBz19`#T)0Q~c>X%t0a81|WyK+)oMb9F-#b#|Jo zY3gi-Gs(`Xynz#VvXN3?j$lKn&eHtC;c7264gRmbE%HZ-&Iq?AYg1=4@N{k(hj21& zH)?NUr`d!@f_=A%=vlmTPFz!8pw=8Wp2@pK_V}I(EWYB#It0>l6M^-}&bqAs|NO<^S;;19DT{)@8vh=`5; z5)oC`|0Lr7a#+egkoUTu|H+Jte=oc8vIq3E4TSK43xtSjE7TJ4gGMWuU8-6ZDB-{H zZ;@XqYC&(w(*?2M_m)~d{(Xj|X*K|6B4jB382*30De|NK8~wqZw-W!!rJJVy^FE$P z*;8J2MyVTc1YT6z4QdAZZ;coELq$`z&C&C)!fjq_@cXj=AN03n-)&-38jVNl&qb}v z)%S(r|DmM+M=H6r4Q>s&#SfXY;P<_adxO9u3Lz!}U;kgMYW+V2{jVJ_>L2I$ZMb_s zAOKwaljOgsUF3f-VMD_<0t^D9R9o!zf}k-UoNfhAwS%)u!EEOM!$b-H)?Y<_#D6~T zC6CSP4EnqIFWhrsAMN+zU+O<-71igsR?(RU1ifYWKmM-BAG`e5F7H!kGknzXbD{s` z+Ma8Ku`d?Te}N{;Lf~NaKMnnFEn0q{`IRWAf11-B4}0|-8>Y}rgsIj8G3>vk`c?`5 zy+4ckv*XYD{3iZWFx6dS7=-S*rux+V|4_x?-~B0#f`{&Z%H8g?<(JEy@SFKJwDVtN zZiq4&4Tz5yG&D<%fPeDSQhu+u;Re%~%mEr`>!QC#{QDC_JpT#*A6JU;kNRimz?-)N z^Plku)GoRI_2+-N2;)pL(Em>P{&%3o4^pZG{Pbgy-~axRg5S;m-kP61fCT+*BE)i4 z5J-CH9)Nc$zD)jqeGmLW;rAaC_gO#hg;wf-$7VWb3t>P@BC;OBLSXctxlzh5-R&Bn zj0LyPc5~aoki*1o{*l7v}dZ>6TML(^cO*NglwQG HP(|1Oex<60 literal 0 HcmV?d00001 diff --git a/src/res3/AMUS_DPS.MDA b/src/res3/AMUS_DPS.MDA new file mode 100644 index 0000000000000000000000000000000000000000..ee86a0b926a0dc0d353c582a188b7f716333a6e4 GIT binary patch literal 2048 zcmd^<%}T>S6ot?Hq>0sqpbJs7@drs2Yt^bP1e}6`LIp7v#Ek)~D^ci1chbIq2)>e! zp-Z1ZMASQ(DMDLuB~-kdJ9Bdx^4)W0I3ygT;KD;6()e$|7~@PZ$(+&uhMw@2cdOCy z=3bQBEFWN8mu`o^zaK^OB-gymHS2y`lq*qwrC3~F+~3+c*sex?uv99oE#ylJ%lT|u zuil$JvomzJ)j;O@B@-9L0YvTOfOMc$9Xe3-0k zj;Tjp1Yt#iVX77cN`b$_EX0RhNVs#z1el*?m{x5;C-hA46!AY!b@B_2d@aE=IRxBKq505_4M9@Y`l^&0TKX;=XA&ma?An5S=IfgA%l4F>?Pe4|7){>pKWEXEO z{a@{Z-d37o!AI)FR$NTzih{@Xj)L$orgxW-p=h9KZ0QjzdW|!)$Odd=Mr4&(-Ec7N zW-GrjT<((o=haUAwf`-DA}(f=h52F0LV>K#3mun8GFuuo+u0jTvmkHf+ai&&5U8WTnTe%TMN)mh|GktUE!NSVJ)#WfZF*|!_e4;Qu zSr~SMj`^+aop5jW#NGB@9ve}+ncM$TS$h4k)-7va@Q<@1MZlkLDBt%z&m(RU1Y3|2 zP}t1Pl|wK-vR=`c^yb{$Ed>ZAYA6Nb7i{Ko)R4bz!#}i*6!e>}05W;#8iCOv>>9xC zLD@4b`^M!!L7gzV{~4NSBK{38$uC4UOLS!g#z)8aM+iytcNuA2g;;P4mBK82&j`kWCFkp91YO2%K9{AXTW2b_<< z7Bkwnb-p$1Obz1)-s(;pVZR0$EtDFcS zpi_I5-zh?J{hQ8_;A3@x4(RfFGSNcu|GK24Bz}G|SO4AqM^)<|cWVIVr-cxqmm497 zLy`vX2qauH4c|>o%1OgNnh~5X%FH=$dl*HV=709CX8iBj-HqMlfj*AtGK-CH-OwiY ze-bi!tJfIu-=9zBzYws%dJn7d*ZI%2DJa@=&preJn^&sb^WtN4gt*>E0u_|B5w9>_3K22^gp&mbYSYgeboR( ZuxP%2jE_u*=I16i;;ctqW@Kah{sH88JiPz_ literal 0 HcmV?d00001 diff --git a/src/res3/AMUS_INT.MDA b/src/res3/AMUS_INT.MDA new file mode 100644 index 0000000000000000000000000000000000000000..bd14d6b9c76920a61f6581d644f5f0017a0f77f6 GIT binary patch literal 3328 zcmd^=zityj5XNWs{&<~)KubW$Iy4tTh$Tbfh#;-8L0B?K!H$%UD-22(1O?C_Wd#LA zkg$^1px_k{9ipT}RCxo05CzQa?)l=}0j*D&!aLqwTl(#M^9=_d0tlf50?IG}lQ0FR zU>Z)t$q2?6XCCuez(Q7Hf|c3C%*jAEl#M%^-TUpkz00je4;FAsoUZ`?`vdI#c>V6+ zh5j_??R}R=qS5JAYxVl-^1Ykw-tEnb>YaZG<~@9SnfX6+xm^(*8_c^ zU+PzSu=^~%k)K6x5B0|W$NWFd|H(ghc>uGOxi2aR0^j#jZsBn_(_dfjNU*DNYm9d$ z@jxkHQ0Yg}6$Sh^U}ARWa2XA}KgPjBS7d$Fj82*i0S^jMQi|gbEF%pv6vF(}NDR%!;{pZ(GejJDtB6Rha zuK!i)1Bu!hwCP2t|EVLe{$65){x9c|s;xqF9d1q>uoZOSu>OV&Ra}%P-{zv@J-zzWSM|o2S|5*R4)c@fIxgGicl(jwQ ze=&G4ZI56aYHL9L^I_`0^Hq5{^PkjBzIS{Mh_fUJ;wK|8`ge^`80_Jz@G{o_+ym_Y g?EI(cz9qp-`7M?DfN2c!zhn?Nso+x;rR+ogKi6o?AOHXW literal 0 HcmV?d00001 diff --git a/src/res3/AMUS_KNG.MDA b/src/res3/AMUS_KNG.MDA new file mode 100644 index 0000000000000000000000000000000000000000..91a71b08c7f75f7b767bb0d8264ed7679fb2adb1 GIT binary patch literal 8192 zcmdT}&2JQC7=PY(W_D+{1-7uzZZLyFrvVzIAsVLLw1)yJ(O!De z4UY&gfjUl{ovR!< zcI@cHOV6IUaQfn0P=0D^>gln{)Yy^A0ewg9pDWkj4sPAJedEIqs&7``s9vpJx%F=C z9nC+L@BCJs`|Rgtk8J*h|2QkRQ?WGo`YF$IT-Qx-`;H`cp*(#lAhU)<6?_h{(%yw~ zc`_tH!km%jQbZKi9k_XOA2I`nAN?KpJ>d5o$G)zgmn1Hir_Tn|uu{q5_j|5QPoE7D zF9&dI7?I=m!y-82`UP{zquuIEM46>Nd<*8wF58X2qBb)jc zNSAHo`TfRfLV5kYW=6@4IUsI(tp z4|CMnAzUMnEgmCt@c+ZtEdEsf!~ZsN8&(D>I1nT!g2Rd68ly$PUs%u_0sMw6vm7-# z5j5;L1ftjgEnay|FKPT={&kxD@7brT_#agMkEmf~kWKI>*epka|7`w~Zw%p^KnTDQ zAc9`Fy^};B^YH&qKd}Erj6dHZ{%s};HbmlomPQ-@iU_PCWc(h3KWh{rMEt9afR5%; zR#W`X76}jy>m3oY3;5svp7A4I%>n+e&wKt%%P0htl8Gg|kt=rNG~#D(XBO=}#_iz$ zL3e&Q3>3ii25B)hTQvTQ3#|WMjNb=-qviE0F_Q`3=C-81Ynt1f*pnO@9&<#7IU<|b z$i}}G`2cnZBW(_~Yxb_|aZYx_|6g5Y{7L--{nzzRWb2>Q%Cs+72vYoSOGB60&RZ;) zV6j4|(|*5BdktG*O&#k2vE?)67T`bkGS@#sbpYz{mHxs1mz4h1uG9{GhV8}ipX9$y zdtaPa)ToN3a>p#9@qhCe_*MPmIdS}3{96BO^PnyK)CX+PcHqai5zn#zvrKzF+o%ct zAm#+)j&=Jhx5EFLd?AnYN z=zpAcpF>-h_%SNCU+(|;KgO@S9q1nmL6*m7Io{-T)*v+Eins%cpz+^-$nl@# zzp8%?|JSd{{EuZXng7K4XZRofXZ+BAqY=I-4OH2qr(N9b=qT8529-VV|Gj);{I|g0 zR{WndgD?z&xc^s;up$DsNbL5G_P=`mb)E6o`d?Kpw*F16iT}9~l-vk9+z7hjyrMn$ zU#GpU|5PD_O5O6fWbEg>XU_O$A|9bw xR`t)O@xQ{~KQm+aFE#&e(f>Aye_Qrsb=e31C$mkO0)99-Z+=En&BA8F|1Yu?`WgTL literal 0 HcmV?d00001 diff --git a/src/res3/AMUS_LP2.MDA b/src/res3/AMUS_LP2.MDA new file mode 100644 index 0000000000000000000000000000000000000000..7b09e7f8b39810c9a699f7afe6458081471133b2 GIT binary patch literal 2816 zcmd^B&o3-N5U%c?*&Qq)kw{!L5gCVN@qR2>Nw1KQtVApq2PU!MhPZH&c%8h%dne(_ ziGRUOoctj!PW%m2bs5>QB;sN>zC%?{O-*OM`l@K23q0!KnNj) z5}xoyN~A^5{e7rArp5W?@>*$ObZEM`1pNRL2bnIA?-#-Tvzzw6J+a0f+Z{V)i`t=B zD(A-X`QO8fGjmI`%ViyojF11y=JMIx&p}Q}*p2O7eYjV<+u?p9t>z*;y8BZ;xp`~L zn%s{Bqz``Y-!tR;K9k0VAOwnwU<`*7K353~7!c4`2}4{+$W#gx0c|2v4Su+et>eFN zYLxm6{}dHMBY#1Q2%wrft?QUMznV;;{)TzbB!6rQrBGA2A`vpV}U2i=Yh)Q9}KL$t{mGZe zl+Yhsg;4*7ll?^sY4{^X{HLh{`58T)4pMKU~1NQ-Xg418e nL*B&)p@e`J3OeY_(D+m7@i)@v!!p8O%xTWSEt24kzsNoT*n^k7 literal 0 HcmV?d00001 diff --git a/src/res3/AMUS_R3H.MDA b/src/res3/AMUS_R3H.MDA new file mode 100644 index 0000000000000000000000000000000000000000..5b68f52957f35c5a37cdd12f05643926aa094df2 GIT binary patch literal 10496 zcmdT~O>7%g5T1E&*WNT~;>7*Qe>QcJuCd&>O-Y(INSpqsEecd^S`qaCrV2$IXw^!n z6+%djPjD%JSCBZN9uPMq1Q#SY^@P+DM-E(&5JL1osS;-1&#vvY%K@q0yhEOUH~Y`5A20O7=mFKfl(NPahL!fCSe~G zU<#&T2KGY$MR*2Eu)P){3Y6%eiy6$Khh4Y>yRip%VlVb#4*PKc^SBFl;~w0LgE)l4 zID(@%hT}MaK2G93EZ`JQ}-3QMPf@lw<_FnDd z+SEF4vabu&p@#e;rjrHa$-npIp4!;t7`0K{SPkwB5$<|-^k5@$>ygd2Qtz=3`GtqkNTC;}XulEXzg zQI>^D*tF<^om(PD_=7(QzuSo45m3=Ep>jD;c2Ij2z`{lgTfpMAr6n?i1Cs>%a7gKd zU{91`aux~|SO_p*AQLnJ4?71t`p*jgr#&tGKhF5+CL4Aiz#G4&-oUM#@&BfIAT>3r zWQb{P2+4+6m`NvivV!O(|JU{={V#>4a251UxCe;`AwBm@VBlk72zy&>@dGjyp$#Nd zq;oiht|qj}CHe{fFTW-63jr?qf5itC2b>2835+XXG%d(%?+?`|!L z-^712e)j((<86c?ZHPMmoA`I2Fa{?AcOrC8Pz*J$rd#OfQ-%M!Xc_-w?C%gj?Sz|m z&Ig`J2&f`M@jqwyZxex|lZH=;;839BAA?e(8Te8iU!sTj?|qf@Ki9v@RR4U4cdmm~ z!vCDk_Hq8V6+v2yIB;5jMyTRfNFj1{Ds#+#qyN-S{8u7}5<@HgXDCNdM$l!SWM6ujPdI2P{y%s>bY+wN zl>!$v?&ckAwMXwcoe>1gvJfCeOwpd&P}hK){;K*v^fuvd(!ZpCRJ{+m?kjN{?VDWx z$jJ!jw1ot`p`{TulW7#WO_=MSiUErM%$F_WpUWKAzlPnn^{-0!xyfl${~WE6U7H9z z=sBR80wagz;gVb^%VV96f5!j!AIbQq{AY37`mdf7ehUe0wln#k!`@iLu^G|za#RS( ziXMfAE(CIFN**ev1%H8M@?c-`d9g%BZBnIHjIDnfBq^b`R}&L ze^rR{AN1-75jG=8E&I6tl@LMzv>6uDNn3`C{yR=jF?t|VL|4HL*8wf%% zf`VLH*pjQ=x%q9Ne|i4-(-Zw~$6Zl8ShvUXKdT7h{>S!6bh2{Ll>O0C8t1<}|LU7g z@;@8TzZ>G8{m+9jo`2gw5a8)DehZ`6HN z8v9V#b3YL4KSs;--zoxWC&C>6(k;qt8fRXFAX=*bd-zt8|1|$y?VV-cvi}Vu9GeJTTL?06g^A!p_K}fBo=P7?mMphM z6dJ=t98=LzsJNw>r#wCqBZPnawHUuP3wWe|9U?WcTknLM`A=@Ihy`z1z+|7#Cg;&0G>VO{?d<^O)R2-p9pBQ6DgQw+5K z-)VS9;s5@862JZZhab)VbtS9PT}Sx44St*UV*UG%v4{g%_4|+RDW@{uWSNjI)#;`1 zhg0$V$J~%d{U6W&Io~zxRr-K=0d*!P|LclKjj*l%+a?gi81etaT%7;)&wr5dAEo&Z z<8Rm*e>DG8hT!_=>uFyd{`~eh2vO(XH}5C;{{;OLoqtFA2h7+{>wg;Z$@EP4$X`!b F{{r_?Eh7K` literal 0 HcmV?d00001 diff --git a/src/res3/AMUS_R4.MDA b/src/res3/AMUS_R4.MDA new file mode 100644 index 0000000000000000000000000000000000000000..ff0109b76d871d861ebb45f7f65eb41a68c55eb8 GIT binary patch literal 11776 zcmdT~&5s;c5wG`N_e`%nUe9K2?|8H8?e(lTGdue+Ua#$J*r0Y|q(m|wiXAY%q-7is z0>X!of_LBv8a3zyTo+TtEsOI7Z^YfpdUM4v`R2A}$C)h^eYq^?GJ{cF6(l zwBKQ?r?;o4f3JR3^?UW&LIg3?pbiO4!3j7C4LAkUa2lF01CPNhoPo1&4(6Z*=V2Zm zhXq)K3$O$!EW<@;!wOu2Rd@nA(1kVV!8&ZfCTu|;9))3yvBsIm#HMEICNWdyggI#% z=9HN>r%lt$n8(blIb+V6b7s!8%y~0!9ybeS(OfV~CN<0EqG_8IbIGilCrrn5&6?@W zKMK(K8E<^_#oI5vu(Nsd#+?+tZSdUbWw3`o{ttfjHez+Up>eVzI1T^;K9M|{cnu9 ztaPgLqqh$}`Pv)fZdtnagPgDqwwCXFF^l6kiX!KnKu_ux`u93}w^A6g8GeS75BB!5 z49xq@2b~Tc*oSfu!6iJilR=zZc+lC)a*QlG*vT=#p7GyuFpFWbYFaDV$dI2tR>S!B z|0wuz7Ub8HnuT@5Pk09{%?Ct;4e=*Ugmeq>L(89W?}ML_=%F0c;G#bhV7Ie0XW;%X z-e;17@&Ej|@$lI+=c6fWl-VI5{U`88Hdt813F%yQqfx2r=0#y|ZD z!5`oQ;a@*2{|EfS|1$oVg#boG9P*!8+A!_D_&=E97bkOMYsmkXA0mFrf5kH#8UKtw z#riKIXI%atD*K&^sGS0z9x?uJeZJs7E(mCp@TUXyuP^!!5`QobKP3Y6e+?RIM1eUU z1?@nAkO4A%l!;izzjsOSJEsYd@Snl>M+hYg=e;mQ|G&aQa2$Tp2>9h7`?UUt)He~h zr609*O{q`ZrdQZ*61E&TST`{1JYos)O-= z=S`0vkp6}LOZA^HP(1J`{6C<7VhCZsg^ak1ITH1cOh+zO?;tmttg#95|4%Q8|55)A z;HUaWdRHy!AJ)J0$cNyUv|nRIv`z7k`pkhGZz0-KD)!99mfB(zamm0 zSZCO~m@9N4$ohAB!_98Hvy~Hn=tet*{{Q$hMf?~3Pnur;1v`UiDG%^q|IeWQ!xT28@V{i)L&SebWc{P1;)woN0*y@;g6qEdXBLKHVNxt${IC6H zEPn3$q5ns%GFkM`;qmVS!B>s{L4;Jw15WF)4#uDA`Vae`MgCK#4q49sHA)1m|NOxR z;D3wrANqW8SpP{c^tfS%IkqQ}|35R{|A5QY0sN!SqA|X#YRpr<9IFFxt{T0>7?*wEsD&I1dgVIbi(PelPKl>%T$# zqW4tysfBr>eU9rN>HmcOUswoWSD~bTE4K3U6JZ<3|39y2{wwMq)_>A{6z^gaQhOZ# zH+@MrtoDijst6+88i`dAqP)h5z^XaLU#F}QRs>bx0^|SXyNbWyzqMe<|EaA1a30wI zIp8(E?0fu_5weki*E}MF@qgjBW&GIxW&M+i{>cg*#QPr<|GL`|;vaX?acYne9QN0- z?WMZ_VS*|)FZLAj|0};Pl1^I-SAIue@Rt!T9Yt z!H>{1|B?Saes9VD^f^cUFUy|b|3dcZvMwBg$QxVIXJA_pT6{(t&tr;-2v7|{Q6U)uj0TL0iY&}V#HB!H*AQP^ev`?B9b z<>Q||4QS;4RWXeJV?W7aNAEvq_ZK1J`iK3U4*Q?*t8WAUt$)cO#oa#22*{ZjoUajn zM^rOn4`)Og!Fe@igz?|}dy)UdG1&hc(*0EBo|Al_wH@`3Cqm$VwQ9RSInvnE$p7zu zu8be`&rtqL3m)(dDgP@GLjS{QL`1qYjuY-0QAb1${EiqAftJ9!BQ_~IF#gM9_)qrf9d}h{8!prl>MO`RA&|#|J@HOekbTS z|BuAK?*nH5TGFNdMTVV0{{Q8B>i?nm z=iU9(!2uqU)Z8o;b}yTtW$qY94y0s&8iy#N3J literal 0 HcmV?d00001 diff --git a/src/res3/AMUS_SDP.MDA b/src/res3/AMUS_SDP.MDA new file mode 100644 index 0000000000000000000000000000000000000000..6931ce1ffe817581553f742ed4ecbea2e0522abc GIT binary patch literal 1280 zcmd^;O-lk%6o%h>=FT{NYqsbEVv2~V(58}7kQl?Dz#{wzp+!RKR&Z0xyhHnn+V@Xd z^;h~C)g8ykw4hy4@8&(6^K!V)@%3R8rl6r(teQG&*&{=gOG_p9ZTa^Wyl$X5^tj_<>hps&H4 zBd6vxoeQVsY|HAv=qq0=TkDz3=1OU2ud-V$8|G>@yOFfA$u(>7Ei~Y*cE{+RiH^7v zSK?CK7~(V~+9}cLo)4r(OY{0klx`nCTR9s3Mu$|SXOj=Msw$jw$t@p*D_tYR8o6B2 z#z(Kqj4lVZ4fc$NY083L`US_F*HJOkFmtvcf7X^8HlQG}gyjV`F>en^F8n$5_@|ri l{QaZo3V}<6ngP#kz;cnK_aM`fAI$5JH>v|eXm0p->lIXrR)7Ei literal 0 HcmV?d00001 diff --git a/src/res3/AMUS_SG.MDA b/src/res3/AMUS_SG.MDA new file mode 100644 index 0000000000000000000000000000000000000000..5c7543f5fb0ea6fc1492062bf542edc81d3100bc GIT binary patch literal 1280 zcmd^+PcH*O7{;G@clJ+P#F>OeB7?M6HMGedwn7l)U|T5;ZKCZ_lU_LVV0UhA5}(H1 z*KqVPFl#GTL*m%*T%IR0Pu@4b83Kn6112n_kVXb$7{>(uix^|XG{%|E3}!NmrHB!c zMx1mq$RvwWl%~woAAOMWVa;#&ySeRh)sDXXA%8Ff`WaT9$hvIH8`+UtDjnGal`Fop zUMy~|9`Ec|_iDZ^)=H&~tW(P7ou!Xb!aLob9bAPMxv-lHRqThouoLuyYqj7uIG3l1 zZZe9y=g_}@{BC5j_UlYK3Ug0}r|UZB{FB?_gvm44t=Nd&8+cQ7_@!_w9vJ3ZLUs+=oYBO1M5o8+{qr>P}VJagW$)Lc3QXzct6jP5D`A~0RuR;{| z9fIhouMmEQAP9O2dg}v(w${F!xj4~VGrAsT?X%B5hx1$ibr}f(gb+at3i==idFY1$ z7=#m0fFc}!69R>hC=qE9V1S_rMTC)vg~Aw>=o2~Y6M4*GUi6Ui5( zzI^=TncjZx-?sgt!;y|#rMEv`t-agp^vaIs|FtOt0)GE32}2BmfVhP<6-bz`*J{fN zwEC3JENs#Z4FU$%Yqcbyc#1X82#8Z1B5JRFPC8n= zL87<)SCb*>zw`Ale=JqO>hC=)(KTTMT(FSB?r2vp^y%mW!I=a=I~jlEBN8_PF*uGx z6+BH*sCFv~hX2I_&u!1}bEsH<+Zr@SrPb)Eo;1V1^U3Ca zv;LI-rp;;B?vkwSHPt^)2*ZDO-ST^p11~$hasuK>?tEv*T0=q)cHd-7`Tz6tVSduT zLQp*a%((MDCHdWkfO#5(hMzkk>))7vl_N6$nE&CIj{GB>)SCLA^~!kS&-%aJq5Ai- zqn907_FmPT2r@JJ*G3Naf70K~KMmHW_7Rh`+5F>1!1^Cyent9!c$$Rh{{OkiaR2A} z=lu8H=YvlKH~+c+^DP<`=m%k7lO~1GkNwDx#@-%ZrqZTz1tj3;6Kr5?VPUQxvMXPnwAX=wXR{4y>%qEG#TQe*+T)2yn14G03H8*f=;az-gxx8yklN1_lnWgaQL2 zgHnoyhKU0M(_aQ41E`ewKa|15psm5At>u6QaEI$a$uO}2{jX#R^gk=A|Jj%r3_$)@ zV1UpLP&xtVQVvi+H~{_c31s*H{m-C?=6{yo(12k531zSWLxjOui^bWDP1}^s+?dVT M8ZB^uHqajc0Mlt%Bme*a literal 0 HcmV?d00001 diff --git a/src/res3/BMUS_AKA.MDA b/src/res3/BMUS_AKA.MDA new file mode 100644 index 0000000000000000000000000000000000000000..7b69e75b09448f58a2e329a8c32a3b3f3c34b9f4 GIT binary patch literal 1536 zcmd^;Jxc>Y5Qb;xZtpIM9}zza3pq`5f{AAgn!^+JL_skYdPyUK0YgdyX|za_1zSM~ zmKI`d>o4%H2r2vr7S3G~!Q|9VMc-m)8QvM@*$)I2IB1}Q0WpX}0)}81Mqm_@@E^n& zL#8m5ai%ey87zhj5fxOCqlP*f7{fRwrvK<+Z0wc%V{g~XY&wb?K! zT*#K(Z=OdKQOde{l78zks%3P+7g>x$ZuVwMaD}U?O5F4y0vS5OLd9}L8Qx;*(6WRe z&s@c_asrsKUUA)m0DQ42vnD_R=hStDNuMeZnR#!c0Xw92zx7oJ0kAc?jkB4IGrlIjlVWdJLTg>2L+)0Guj6IT`W`E zXWeGd`qYh^!8{sKT-iT7{IK)6+3vKuaS-m-Y6qoCt+ZEpH>b_e;9?kze{pGcI)Fs6ABKElZUPu6gkM5a;>}`M#>yA+SpU(DR!S}D zFBnl8u(=0pm_273ToA~o48mKMUDd3Ao4qpn@7XkCghD&zNV)l5Zk1(WXVC`pffa_; zpMSMH{|qh7-6)9yZdRls1;~Kj@Bf9B$n+ufc>c$!S;}hTl8bC=gohxt#-En3LPxCr cyVu(G@@Vk|&Dt|yI;Ls12P^FRQLE2_4^l#NiU0rr literal 0 HcmV?d00001 diff --git a/src/res3/BMUS_FAH.MDA b/src/res3/BMUS_FAH.MDA new file mode 100644 index 0000000000000000000000000000000000000000..49778c4af287c7c10b1a5d5619939270edcf9d79 GIT binary patch literal 1536 zcmd^8O)mpc6g~IOyw0?!3JI}buo*;+kDy5xuRe-oY?MT75cQQvB{oECI{!do?Qi%6 zeucdqKfnUl44O6-D-ztr+>M*j2NG3BeMdDU{}st`jQ6x(X=NCuX;ysOHp5$Yvum5MQ>ARy*V2n&2YQRH zt2GG8h!JVg&H9@#5NaG5sz!Mw8fBabSkp3MEwYR-7D(3h9YEJqW%r*$oDl!F4_YZz z?cZXg*2S-!GwiQ9y!&sDyipj$xR(EAKJsQfA&SOCGGf&88xwnc0|{6IXia0#rPe;` x=%>y>>K>*ZkNQT{j3iWD-yB8g|GrJvZevq41ae_v)pooR)hB(IL?8T;=L@TAXx0D# literal 0 HcmV?d00001 diff --git a/src/res3/BMUS_KAM.MDA b/src/res3/BMUS_KAM.MDA new file mode 100644 index 0000000000000000000000000000000000000000..ef1e1fa43df720b5a847f43527c175bf1694018f GIT binary patch literal 1536 zcmds#IZFdk6ot>bvt+U-Ca$8$mqHxp&^-@xFV9AVYx)7c{uxffqjb5kL?jgi(VCqNqh3 z>d}Bk{68_qh)GOl3R9VjY0S+$#E3{DnG{mVMH;!uLtgTcp8^!55QV9RA{1@<2jdve zE#{Z!GP%TLW&th0%BjB*^feei@k)n`{$ z27lO*4@0rUw52GDEX#sh{19bnDj`%%r?Wa7FF><<3(#7NM%uE#&{Z^yAq(^jQHU?n z%UdBoy%mZ!CTFdG&(h2zm|6Sx$esf7+3jVTZ z1-I=5@sM^0n`z;7o9#P(c%6*;&fjeF{{eV`V)L&(eB_r1rn6?-ZGO?09bsps3<0Mg P=*~o-7b+Jj!hc(@J~MUf literal 0 HcmV?d00001 diff --git a/src/res3/BMUS_KAT.MDA b/src/res3/BMUS_KAT.MDA new file mode 100644 index 0000000000000000000000000000000000000000..2e2bce31a75f4367e8873d6bf65fc5a1b30bc7a8 GIT binary patch literal 1536 zcmZQ#U}0coU}Ios;9%fn;9}rr;9=lp;A7xt5MUSyfRT}riIJI+g^`t!jgg&^gOQVo zk%@_knTdsom5Ggsor!~qlZlIoTWXjFhLdk-aJ;u;h@OjM2r$wa)^78WV_?GV+0J8= zUUzTqD``609MPQG?9+6jX+>X3-!w;`U;|?d3v>M-SI-cS&|n1(LrY6DT?0#9BLhtZ zOpumeq|jL2l&sg3uh#@*)-)A0r8U+xR$wYc5z(0VtSNZPQEWz{s3Vrc#KvHvn0Lj2 zm6er+g$3bn4pt@xfhZdr9|r~qoxs4r1LQj>0M#g_XlOV%FfejR=4sdf8B7cuDPX0{ z{}>=rEdQYlb_RAm24O7*Z8b(=6-Eh7Mk#GZZJ=gU05o%e0NDQ>&oKSZ$iyHK1@;|; zR$yRIhWL$vLox*-;oy*f;*SCH10~inu><4(t%w7<85}_Wg8(pg!2q2GOAG`50|5AS BV1xhw literal 0 HcmV?d00001 diff --git a/src/res3/BMUS_MTK.MDA b/src/res3/BMUS_MTK.MDA new file mode 100644 index 0000000000000000000000000000000000000000..aa56d12a1d0a4050d8d910bf8b40dca34eb2dba1 GIT binary patch literal 1536 zcmds#OK;Oa6ot>+nX#RukF;)~R0v!^k=rQ2eTXzt1r84h+H}*j8#Y8DVq26AY(VN* zY*^9PlAi;A1c~2(5U(4@gAxTKHVD+S@I4-1kLSC`1O*KTED$*29lTS1A zXJ8z+xA$6)wo6;pyNz8Ao3*w8`aM|kB6*!O%==_BIZmD?$3dn>vlXqbuh*{c+s0`M2og*pg!5}1_#ef*PNO+=9M`L%;T!rubS?`^MS5W8yA@ zT4SX5ahp%m!(L;4OG}?Dzr|J-TYvpI2){(AlE0*Dx7^yzVNjmkzY%$y|J#?$FNgEj o%->;tKG;xg12%18X~||QQ*0iM!X=nwugdb zz=Kdhv3H^WfJgrUrM>n)@F3p2i-`JmyE$a3^q}-mzlVKqAM@tD&%B)_NGPP>!b2Jv zWHEq23}F}}_#Y&MAmIoplt>9zcp^=Lh#ZonC`B%Ll%@=2Z(h^GxWBql+j>;46dsh< zkpp($SI0nqhPB7`ojtY3Z$7;^J$(DB_40!~)2wo}R-9j2x;OJ=rLz8Tqo)1YQt9q= zu{1qb%!dmSYPCDMyJxoxwq3C79@vg;bq_R~=l001b@vkq@vHy(i>)1fylBgd6E2C; zAQmPH&x~>$DJ66B2NBB45=NUrP&GKWjo4~lbF1n5#z6eUxkJBV$N3RE@_X#?-D>*5 zf=23F9C0xgMhrahxb6p=4Ze3`#}9bJ3|6=#J1)kjkoQIIwv#u`;16a3&iU0rr literal 0 HcmV?d00001 diff --git a/src/res3/BMUS_NOB.MDA b/src/res3/BMUS_NOB.MDA new file mode 100644 index 0000000000000000000000000000000000000000..e19a1b92f64779a41a9e2ef9c357b356febe3095 GIT binary patch literal 1536 zcmZQ#U}0coU}Ios;9%fn;9}rr;9=lp;A7xt5MUSyfRT}riIJI+g^`t!jgg&^gOQVo zk%@_knTdsom5Ggsor!~qlZlIoTWXjFhLdk-aJ-+tlb(xX2r%Lqbhi7*F)-ow>;&IQ z+ndgG{F;`cfC3zSf(?uPbe1Jdg~~|FD2y qa8N+?B~bC;22A|G_oK#Rkic2^PeXkDk zUWtMd$^QjWQSn#k=%}K|VfOA^`kta(|&@}SvlGv*oJ=QUeA5e5+0js?N9O9M#c znh5XMih9U@9`^zKD#}_ES7f0q{ffN4ru^Mhdig4U+#>!j zpXT{p!VSy9AB}t;DD||q`GD@}h~K;UnnlR(rO1)GMwL{eR$xN~*K**moBd`V^UW{>3mjqC5Qv}+?dU)!y3ma%{(~{b zh=rKNI14kI2^JwnL?N<>Qd^ONfEB-ihno zxHfKCmvpgGmIe-VRj*g}>+g7sb9}Ge>UEt_^=`ucrT@G%bv?(2tC s`A>N_C*@!LU<~7!z$C8V zDz4!&NC-h95K<@+ib%vFAwfg|Nm3M2L@^~aM&mdBQ!}1C-^^d+>)pocN*6Q0=MSBm zpx?tDynp*i*J!1aXZM@U<+~eC*SgO(bDb`>S`QYo*22B)c1{2G&aUpiE?+jvokq#& zez{w2_xCl2H|1fu(ci1t#HIA$q|6VG>yE77@P{f*U}^5llo=(Cg*U-eE29y%P#A3n zHG0Secy|29g;7dLY2TNB2rJ7!)oZsq20m)L2!{>POWT&;6vZGuS1z0!|KnMsfD%3zm=xUFEHm5!b5H~8bR!OHD9XpJ=ddtW_LDvJVWrd=|2PKL$1&ZQiG@{Yeh&;KBQLdagF zZvIc>+7|y0nlW5bFuxTWL0IJ_Qy@U>XGS_Bcu9SOcO?976Rt!*swDneB~nb^qUesg ZZldMpux;FbwsQP`d;k68cRdRyegVH{jjR9w literal 0 HcmV?d00001 diff --git a/src/res3/BMUS_TNM.MDA b/src/res3/BMUS_TNM.MDA new file mode 100644 index 0000000000000000000000000000000000000000..5505e3badf7aa0a3f7d344c7930ca9103b65a3e4 GIT binary patch literal 1536 zcmds$Jx?1!5Qg8Ky|vFa28Q4gwn)Ptds%VK+8%L zbbO}HpGilY{FnQ4htb zckmV1@iD(%{90PerUz;} zr!$%Pl$S}(c*&O9+VcBm)!ExIRdZ$z&AvHy%(t}JOq=T7Zky`nC->;m6i$D)+p<~o zgp9(N8`*lRl~R^vF*iSmn(P3hgyk7cg;RLN$w2Hl|Ix}3<{dSYGI6CSDB z&zdJ|lxyZR583zxlJ7-gTqct8-IQ(-Z~H&w^Dh^eU$*7Xm6`j8oAvoQG7{|JFTOFN z!A}i->C+zx7+=E=Y8L7Id~wzhX5p`APpJl zfkV&>han69!(a><<35UxLL-EI9*mz1uDiZ4GtoqzSd+bz51|LPzQ2>9v~C4}%ikGPo~QgDbCiwzZm zjj@Z0a>C_eaa;j|iIqk}Dbni*O_~aD8|V}r@pjw2Vlx{8JVVOpGaEXxRwE;IyUX+gUrooz}!)k0cg*S9!z#c)F9{=P+n74Q`XT z_4j57AdjyQKdryaF1z(FIDR;xuZh8HDIyZCh^hZIsRX+Ecgo0s%SiLaU?XwoG$iS; zO(#tKe|1I9agB~F#DJf7>)#cE*wV=)mj6YcBG=F!Q(%6H1!W%OF_ZTKRdx z%v1gDhv9!aV)=i#Nb366Wgb%9>loXUL~D&;>fafGZ@JY*IAvFRx9t6v5mEqE2&&Le z?Qn$k7qE8}vt{h7;IZg03dAM#zYotl{g2fDwU>#vJwo0>GVpXp2wdt3^?y+DUKSE7 z*~9Q3eckDQ$FHF@zwUn}r-#}9^!h_xJB0Y5$5~}By(yN2^V3Uj?#7)?|I_|gS~Q&t z$}Wy-e$oNVMDzC&HYvlwx6+{Lc9#?cI8eru6&$SMaD=(Dm> Date: Sat, 23 May 2020 09:52:16 +0900 Subject: [PATCH 07/14] Merge upstream changes: Merge AGS changes - Added initial text / menu positions for newly-supported games - convert_zenkaku and convert_hankaku are now public - load_cg supports Ayumi Floppy - VSP: A transparency value of 101 now ignores get_palette --- src/sys/ags.cpp | 24 +++++++++++++++++++++++- src/sys/ags.h | 10 +++++----- src/sys/ags_draw.cpp | 3 +++ src/sys/ags_vsp.cpp | 2 +- 4 files changed, 32 insertions(+), 7 deletions(-) diff --git a/src/sys/ags.cpp b/src/sys/ags.cpp index e2efb36..1c50674 100644 --- a/src/sys/ags.cpp +++ b/src/sys/ags.cpp @@ -180,6 +180,9 @@ AGS::AGS(NACT* parent, const char* fontfile) : nact(parent) SET_MENU(i, 464, 50, 623, 240, true); break; case CRC32_DPS: + case CRC32_DPS_SG: + //case CRC32_DPS_SG2: + case CRC32_DPS_SG3: SET_TEXT(i, 48, 288, 594, 393, false); //SET_MENU(i, 48, 288, 584, 393, false); SET_MENU(i, 48, 288, 594, 393, false); @@ -196,10 +199,30 @@ AGS::AGS(NACT* parent, const char* fontfile) : nact(parent) SET_TEXT(i, 44, 282, 593, 396, false); SET_MENU(i, 452, 14, 627, 214, false); break; + case CRC32_TOUSHIN_HINT: + SET_TEXT(i, 8, 311, 623, 391, false); + SET_MENU(i, 452, 14, 627, 214, true); + break; case CRC32_VAMPIRE: SET_TEXT(i, 8, 255, 615, 383, false); SET_MENU(i, 448, 11, 615, 224, false); break; + case CRC32_YAKATA: + SET_TEXT(i, 48, 288, 594, 393, false); + SET_MENU(i, 452, 14, 627, 214, false); + break; + case CRC32_DALK_HINT: + SET_TEXT(i, 24, 308, 376, 386, false); + SET_MENU(i, 404, 28, 604, 244, true); + break; + case CRC32_RANCE3_HINT: + SET_TEXT(i, 104, 304, 615, 383, false); + SET_MENU(i, 464, 24, 623, 200, true); + break; + case CRC32_YAKATA2: + SET_TEXT(i, 104, 304, 620, 382, false); + SET_MENU(i, 420, 28, 620, 244, true); + break; default: SET_TEXT(i, 8, 311, 623, 391, true); SET_MENU(i, 464, 80, 623, 240, true); @@ -211,7 +234,6 @@ AGS::AGS(NACT* parent, const char* fontfile) : nact(parent) menu_w[i].push = true; menu_w[i].screen = NULL; menu_w[i].window = NULL; - } // Eコマンド diff --git a/src/sys/ags.h b/src/sys/ags.h index 4f1f298..79b8fe3 100644 --- a/src/sys/ags.h +++ b/src/sys/ags.h @@ -59,18 +59,16 @@ private: SDL_Cursor* hCursor[10]; // AGS + void load_gm3(uint8* data, int page, int transparent); // Intruder -桜屋敷の探索- void load_vsp2l(uint8* data, int page, int transparent); // Little Vampire - void load_gl3(uint8* data, int page, int transparent); // あぶない天狗伝説 - void load_gm3(uint8* data, int page, int transparent); // Intruder - void load_vsp(uint8* data, int page, int transparent); + void load_gl3(uint8* data, int page, int transparent); void load_pms(uint8* data, int page, int transparent); void load_bmp(const char* file_name); // あゆみちゃん物語 フルカラー実写版 + void load_vsp(uint8* data, int page, int transparent); void draw_char(int dest, int dest_x, int dest_y, uint16 code, int size, uint8 color); void draw_char_antialias(int dest, int dest_x, int dest_y, uint16 code, int size, uint8 color, uint8 cache[]); void draw_gaiji(int dest, int dest_x, int dest_y, uint16 code, int size, uint8 color); - uint16 convert_zenkaku(uint16 code); - uint16 convert_hankaku(uint16 code); void draw_window(int sx, int sy, int ex, int ey, bool frame, uint8 frame_color, uint8 back_color); @@ -118,6 +116,8 @@ public: void box_line(int dest, int sx, int sy, int ex, int ey, uint8 color); void draw_text(const char* string); + uint16 convert_zenkaku(uint16 code); + uint16 convert_hankaku(uint16 code); void clear_text_window(int index, bool erase); bool return_text_line(int index); diff --git a/src/sys/ags_draw.cpp b/src/sys/ags_draw.cpp index 05fc2ee..98f8a5d 100644 --- a/src/sys/ags_draw.cpp +++ b/src/sys/ags_draw.cpp @@ -50,6 +50,9 @@ void AGS::load_cg(int page, int transparent) if(nact->crc32_a == CRC32_AYUMI_PROTO) { // あゆみちゃん物語 PROTO load_gl3(data, page, transparent); + } else if(nact->crc32_a == CRC32_AYUMI_FD || nact->crc32_a == CRC32_AYUMI_HINT) { + // あゆみちゃん物語 + load_vsp(data, page, transparent); } else if(nact->crc32_a == CRC32_SDPS) { // Super D.P.S load_pms(data, page, transparent); diff --git a/src/sys/ags_vsp.cpp b/src/sys/ags_vsp.cpp index cc3b53c..153aa1e 100644 --- a/src/sys/ags_vsp.cpp +++ b/src/sys/ags_vsp.cpp @@ -37,7 +37,7 @@ void AGS::load_vsp(uint8* data, int page, int transparent) } // パレット取得 - if(get_palette) { + if(get_palette && transparent != 101) { int p = 0x0a; for(int i = 0; i < 16; i++) { uint32 b = data[p++] & 0xf; From cda1888ebc5dd1d408d66a1ab4ceeddced7b104c Mon Sep 17 00:00:00 2001 From: kichikuou Date: Sat, 23 May 2020 10:22:15 +0900 Subject: [PATCH 08/14] Merge upstream changes: Prevent menu selection when cursor is out of window This was introduced in System3-sdl2 71728db only for nact_sys3. TOTO took this change and expanded for nact_sys1 and nact_sys2 as well. --- src/sys/nact_sys1.cpp | 24 ++++++++++++++++++------ src/sys/nact_sys2.cpp | 24 ++++++++++++++++++------ src/sys/nact_sys3.cpp | 4 +--- 3 files changed, 37 insertions(+), 15 deletions(-) diff --git a/src/sys/nact_sys1.cpp b/src/sys/nact_sys1.cpp index 8ea6f2a..523401d 100644 --- a/src/sys/nact_sys1.cpp +++ b/src/sys/nact_sys1.cpp @@ -352,7 +352,7 @@ void NACT_Sys1::cmd_open_menu() set_cursor(mx, my); // メニュー選択 - for(;;) { + for(bool selectable = true;;) { // 入力待機 int val = 0, current_mx = mx, current_my = my; for(;;) { @@ -388,6 +388,9 @@ void NACT_Sys1::cmd_open_menu() if(sx <= mx && mx <= ex && 0 <= index && index < menu_index) { current_index = index; ags->redraw_menu_window(menu_window, current_index); + selectable = true; + } else { + selectable = false; } } else if(val == 1 || val == 2 || val == 4 || val == 8) { if(val == 1) { @@ -400,7 +403,8 @@ void NACT_Sys1::cmd_open_menu() current_index = menu_index - 1; } ags->redraw_menu_window(menu_window, current_index); - } else if(val == 16) { + selectable = true; + } else if(val == 16 && selectable) { break; } else if(val == 32) { current_index = -1; @@ -544,7 +548,7 @@ top2: set_cursor(mx, my); // メニュー選択 - for(;;) { + for(bool selectable = true;;) { // 入力待機 int val = 0, current_mx = mx, current_my = my; for(;;) { @@ -580,6 +584,9 @@ top2: if(sx <= mx && mx <= ex && 0 <= mindex && mindex < index) { current_index = mindex; ags->redraw_menu_window(menu_window, current_index); + selectable = true; + } else { + selectable = false; } } else if(val == 1 || val == 2 || val == 4 || val == 8) { if(val == 1) { @@ -592,7 +599,8 @@ top2: current_index = index - 1; } ags->redraw_menu_window(menu_window, current_index); - } else if(val == 16) { + selectable = true; + } else if(val == 16 && selectable) { break; } else if(val == 32) { current_index = -1; @@ -732,7 +740,7 @@ top2: set_cursor(mx, my); // メニュー選択 - for(;;) { + for(bool selectable = true;;) { // 入力待機 int val = 0, current_mx = mx, current_my = my; for(;;) { @@ -768,6 +776,9 @@ top2: if(sx <= mx && mx <= ex && 0 <= mindex && mindex < index) { current_index = mindex; ags->redraw_menu_window(menu_window, current_index); + selectable = true; + } else { + selectable = false; } } else if(val == 1 || val == 2 || val == 4 || val == 8) { if(val == 1) { @@ -780,7 +791,8 @@ top2: current_index = index - 1; } ags->redraw_menu_window(menu_window, current_index); - } else if(val == 16) { + selectable = true; + } else if(val == 16 && selectable) { break; } else if(val == 32) { current_index = -1; diff --git a/src/sys/nact_sys2.cpp b/src/sys/nact_sys2.cpp index 3739e7d..30bd3e8 100644 --- a/src/sys/nact_sys2.cpp +++ b/src/sys/nact_sys2.cpp @@ -359,7 +359,7 @@ void NACT_Sys2::cmd_open_menu() set_cursor(mx, my); // メニュー選択 - for(;;) { + for(bool selectable = true;;) { // 入力待機 int val = 0, current_mx = mx, current_my = my; for(;;) { @@ -395,6 +395,9 @@ void NACT_Sys2::cmd_open_menu() if(sx <= mx && mx <= ex && 0 <= index && index < menu_index) { current_index = index; ags->redraw_menu_window(menu_window, current_index); + selectable = true; + } else { + selectable = false; } } else if(val == 1 || val == 2 || val == 4 || val == 8) { if(val == 1) { @@ -407,7 +410,8 @@ void NACT_Sys2::cmd_open_menu() current_index = menu_index - 1; } ags->redraw_menu_window(menu_window, current_index); - } else if(val == 16) { + selectable = true; + } else if(val == 16 && selectable) { break; } else if(val == 32) { current_index = -1; @@ -516,7 +520,7 @@ void NACT_Sys2::cmd_open_verb() set_cursor(mx, my); // メニュー選択 - for(;;) { + for(bool selectable = true;;) { // 入力待機 int val = 0, current_mx = mx, current_my = my; for(;;) { @@ -552,6 +556,9 @@ void NACT_Sys2::cmd_open_verb() if(sx <= mx && mx <= ex && 0 <= mindex && mindex < index) { current_index = mindex; ags->redraw_menu_window(menu_window, current_index); + selectable = true; + } else { + selectable = false; } } else if(val == 1 || val == 2 || val == 4 || val == 8) { if(val == 1) { @@ -564,7 +571,8 @@ void NACT_Sys2::cmd_open_verb() current_index = index - 1; } ags->redraw_menu_window(menu_window, current_index); - } else if(val == 16) { + selectable = true; + } else if(val == 16 && selectable) { break; } else if(val == 32) { current_index = -1; @@ -660,7 +668,7 @@ void NACT_Sys2::cmd_open_obj(int verb) set_cursor(mx, my); // メニュー選択 - for(;;) { + for(bool selectable = true;;) { // 入力待機 int val = 0, current_mx = mx, current_my = my; for(;;) { @@ -696,6 +704,9 @@ void NACT_Sys2::cmd_open_obj(int verb) if(sx <= mx && mx <= ex && 0 <= mindex && mindex < index) { current_index = mindex; ags->redraw_menu_window(menu_window, current_index); + selectable = true; + } else { + selectable = false; } } else if(val == 1 || val == 2 || val == 4 || val == 8) { if(val == 1) { @@ -708,7 +719,8 @@ void NACT_Sys2::cmd_open_obj(int verb) current_index = index - 1; } ags->redraw_menu_window(menu_window, current_index); - } else if(val == 16) { + selectable = true; + } else if(val == 16 && selectable) { break; } else if(val == 32) { current_index = -1; diff --git a/src/sys/nact_sys3.cpp b/src/sys/nact_sys3.cpp index 4013d46..c67c621 100644 --- a/src/sys/nact_sys3.cpp +++ b/src/sys/nact_sys3.cpp @@ -153,10 +153,8 @@ int NACT_Sys3::menu_select(int num_items) int height = ags->menu_font_size + 4; set_cursor(mx, my); - bool selectable = true; - // メニュー選択 - for(;;) { + for(bool selectable = true;;) { // 入力待機 int val = 0, current_mx = mx, current_my = my; for(;;) { From 5571061ac1ea96745d3bf7cd19374498aed1b508 Mon Sep 17 00:00:00 2001 From: kichikuou Date: Sat, 23 May 2020 10:53:34 +0900 Subject: [PATCH 09/14] Merge upstream changes: Add wait after opening menu This prevents mis-selection by key repeat etc. --- src/sys/nact.cpp | 31 +++++++++++++++++++++++++ src/sys/nact.h | 2 ++ src/sys/nact_sys1.cpp | 54 ++++++++++--------------------------------- src/sys/nact_sys2.cpp | 54 ++++++++++--------------------------------- src/sys/nact_sys3.cpp | 20 ++++------------ 5 files changed, 62 insertions(+), 99 deletions(-) diff --git a/src/sys/nact.cpp b/src/sys/nact.cpp index 62af737..0bb7913 100644 --- a/src/sys/nact.cpp +++ b/src/sys/nact.cpp @@ -383,6 +383,37 @@ uint16 NACT::random(uint16 range) return (uint16)(((uint32)range * (seed & 0xffff)) >> 16) + 1; } +void NACT::wait_after_open_menu() +{ + // 連打による誤クリック防止 + Uint32 dwTime = SDL_GetTicks(); + Uint32 dwWait = dwTime + 400; + + while(dwTime < dwWait) { + if(terminate) { + return; + } +/* + if(get_key() == 16) { + break; + } +*/ + SDL_Delay(10); + dwTime = SDL_GetTicks(); + } + + // クリック中の間は待機 + for(;;) { + if(terminate) { + return; + } + if(!get_key()) { + break; + } + SDL_Delay(10); + } +} + // WinMainとのインターフェース int NACT::get_screen_height() diff --git a/src/sys/nact.h b/src/sys/nact.h index 45880a0..333b3e0 100644 --- a/src/sys/nact.h +++ b/src/sys/nact.h @@ -162,6 +162,8 @@ protected: uint16 random(uint16 range); uint32 seed; + void wait_after_open_menu(); + uint8 get_key(); void get_cursor(int* x, int* y); void set_cursor(int x, int y); diff --git a/src/sys/nact_sys1.cpp b/src/sys/nact_sys1.cpp index 523401d..3c5c676 100644 --- a/src/sys/nact_sys1.cpp +++ b/src/sys/nact_sys1.cpp @@ -326,21 +326,8 @@ void NACT_Sys1::cmd_open_menu() } } - // クリック中の間は待機 - for(;;) { - if(terminate) { - return; - } -// if(get_key() != 32) { - if(!get_key()) { - break; - } - SDL_Delay(10); - } - // メニュー表示 ags->open_menu_window(menu_window); - int current_index = 0; // マウス移動 int sx = ags->menu_w[menu_window - 1].sx; @@ -349,7 +336,10 @@ void NACT_Sys1::cmd_open_menu() int mx = ex - 16; int my = sy + 10; int height = ags->menu_font_size + 4; + int current_index = 0; + set_cursor(mx, my); + wait_after_open_menu(); // メニュー選択 for(bool selectable = true;;) { @@ -359,7 +349,7 @@ void NACT_Sys1::cmd_open_menu() if(terminate) { return; } - if((val = get_key())) { + if((val = get_key()) != 0) { SDL_Delay(100); break; } @@ -522,21 +512,8 @@ top2: } ags->draw_menu = false; - // クリック中の間は待機 - for(;;) { - if(terminate) { - return; - } -// if(get_key() != 32) { - if(!get_key()) { - break; - } - SDL_Delay(10); - } - // メニュー表示 ags->open_menu_window(menu_window); - int current_index = 0; // マウス移動 int sx = ags->menu_w[menu_window - 1].sx; @@ -545,7 +522,10 @@ top2: int mx = ex - 16; int my = sy + 10; int height = ags->menu_font_size + 4; + int current_index = 0; + set_cursor(mx, my); + wait_after_open_menu(); // メニュー選択 for(bool selectable = true;;) { @@ -555,7 +535,7 @@ top2: if(terminate) { return; } - if((val = get_key())) { + if((val = get_key()) != 0) { SDL_Delay(100); break; } @@ -714,21 +694,8 @@ top2: } ags->draw_menu = false; - // クリック中の間は待機 - for(;;) { - if(terminate) { - return; - } -// if(get_key() != 32) { - if(!get_key()) { - break; - } - SDL_Delay(10); - } - // メニュー表示 ags->open_menu_window(menu_window); - int current_index = 0; // マウス移動 int sx = ags->menu_w[menu_window - 1].sx; @@ -737,7 +704,10 @@ top2: int mx = ex - 16; int my = sy + 10; int height = ags->menu_font_size + 4; + int current_index = 0; + set_cursor(mx, my); + wait_after_open_menu(); // メニュー選択 for(bool selectable = true;;) { @@ -747,7 +717,7 @@ top2: if(terminate) { return; } - if((val = get_key())) { + if((val = get_key()) != 0) { SDL_Delay(100); break; } diff --git a/src/sys/nact_sys2.cpp b/src/sys/nact_sys2.cpp index 30bd3e8..21c44d9 100644 --- a/src/sys/nact_sys2.cpp +++ b/src/sys/nact_sys2.cpp @@ -333,21 +333,8 @@ void NACT_Sys2::cmd_open_menu() return; } - // クリック中の間は待機 - for(;;) { - if(terminate) { - return; - } -// if(get_key() != 32) { - if(!get_key()) { - break; - } - SDL_Delay(10); - } - // メニュー表示 ags->open_menu_window(menu_window); - int current_index = 0; // マウス移動 int sx = ags->menu_w[menu_window - 1].sx; @@ -356,7 +343,10 @@ void NACT_Sys2::cmd_open_menu() int mx = ex - 16; int my = sy + 10; int height = ags->menu_font_size + 4; + int current_index = 0; + set_cursor(mx, my); + wait_after_open_menu(); // メニュー選択 for(bool selectable = true;;) { @@ -366,7 +356,7 @@ void NACT_Sys2::cmd_open_menu() if(terminate) { return; } - if((val = get_key())) { + if((val = get_key()) != 0) { SDL_Delay(100); break; } @@ -494,21 +484,8 @@ void NACT_Sys2::cmd_open_verb() } ags->draw_menu = false; - // クリック中の間は待機 - for(;;) { - if(terminate) { - return; - } -// if(get_key() != 32) { - if(!get_key()) { - break; - } - SDL_Delay(10); - } - // メニュー表示 ags->open_menu_window(menu_window); - int current_index = 0; // マウス移動 int sx = ags->menu_w[menu_window - 1].sx; @@ -517,7 +494,10 @@ void NACT_Sys2::cmd_open_verb() int mx = ex - 16; int my = sy + 10; int height = ags->menu_font_size + 4; + int current_index = 0; + set_cursor(mx, my); + wait_after_open_menu(); // メニュー選択 for(bool selectable = true;;) { @@ -527,7 +507,7 @@ void NACT_Sys2::cmd_open_verb() if(terminate) { return; } - if((val = get_key())) { + if((val = get_key()) != 0) { SDL_Delay(100); break; } @@ -642,21 +622,8 @@ void NACT_Sys2::cmd_open_obj(int verb) ags->menu_dest_y += ags->menu_font_size + 2; ags->draw_menu = false; - // クリック中の間は待機 - for(;;) { - if(terminate) { - return; - } -// if(get_key() != 32) { - if(!get_key()) { - break; - } - SDL_Delay(10); - } - // メニュー表示 ags->open_menu_window(menu_window); - int current_index = 0; // マウス移動 int sx = ags->menu_w[menu_window - 1].sx; @@ -665,7 +632,10 @@ void NACT_Sys2::cmd_open_obj(int verb) int mx = ex - 16; int my = sy + 10; int height = ags->menu_font_size + 4; + int current_index = 0; + set_cursor(mx, my); + wait_after_open_menu(); // メニュー選択 for(bool selectable = true;;) { @@ -675,7 +645,7 @@ void NACT_Sys2::cmd_open_obj(int verb) if(terminate) { return; } - if((val = get_key())) { + if((val = get_key()) != 0) { SDL_Delay(100); break; } diff --git a/src/sys/nact_sys3.cpp b/src/sys/nact_sys3.cpp index c67c621..b8e98df 100644 --- a/src/sys/nact_sys3.cpp +++ b/src/sys/nact_sys3.cpp @@ -128,21 +128,8 @@ void NACT_Sys3::cmd_set_menu() int NACT_Sys3::menu_select(int num_items) { - // クリック中の間は待機 - for(;;) { - if(terminate) { - return -1; - } -// if(get_key() != 32) { - if(!get_key()) { - break; - } - SDL_Delay(16); - } - // メニュー表示 ags->open_menu_window(menu_window); - int current_index = 0; // マウス移動 int sx = ags->menu_w[menu_window - 1].sx; @@ -151,7 +138,10 @@ int NACT_Sys3::menu_select(int num_items) int mx = ex - 16; int my = sy + 10; int height = ags->menu_font_size + 4; + int current_index = 0; + set_cursor(mx, my); + wait_after_open_menu(); // メニュー選択 for(bool selectable = true;;) { @@ -166,7 +156,7 @@ int NACT_Sys3::menu_select(int num_items) int dy = my - current_my; if (dx*dx + dy*dy > 10) break; - if((val = get_key())) { + if((val = get_key()) != 0) { SDL_Delay(100); break; } @@ -622,7 +612,7 @@ void NACT_Sys3::cmd_k() if(terminate) { return; } - if((val = get_key())) { + if((val = get_key()) != 0) { break; } if(1 <= cmd && cmd <= 3) { From eb24179d766e45e0696675b27fea5c15bf133f21 Mon Sep 17 00:00:00 2001 From: kichikuou Date: Sat, 23 May 2020 11:14:34 +0900 Subject: [PATCH 10/14] Merge upstream changes: Merge NACT-common changes - Half-width kana characters are converted to full-width hiragana if ags->draw_hankaku is false. - tvars can now support 33 characters instead of 22. --- src/sys/nact.cpp | 11 ++++++++--- src/sys/nact.h | 2 +- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/sys/nact.cpp b/src/sys/nact.cpp index 0bb7913..6ed1eba 100644 --- a/src/sys/nact.cpp +++ b/src/sys/nact.cpp @@ -291,7 +291,7 @@ void NACT::execute(T* impl) default: if(cmd == 0x20 || (0xa1 <= cmd && cmd <= 0xdd)) { // message (1 byte) - char string[2]; + char string[3]; string[0] = cmd; string[1] = '\0'; ags->draw_text(string); @@ -317,7 +317,12 @@ void NACT::execute(T* impl) SDL_Delay(16); } } - + if(!ags->draw_hankaku) { + uint16 code = ags->convert_zenkaku(cmd); + string[0] = code >> 8; + string[1] = code & 0xff; + string[2] = '\0'; + } output_console(string); } else if((0x81 <= cmd && cmd <= 0x9f) || 0xe0 <= cmd) { // message (2 bytes) @@ -376,7 +381,7 @@ void NACT::load_scenario(int page) uint16 NACT::random(uint16 range) { - // xorhift32 + // xorshift32 seed = seed ^ (seed << 13); seed = seed ^ (seed >> 17); seed = seed ^ (seed << 15); diff --git a/src/sys/nact.h b/src/sys/nact.h index 333b3e0..1cf5172 100644 --- a/src/sys/nact.h +++ b/src/sys/nact.h @@ -205,7 +205,7 @@ public: uint32 crc32_b; // BDISK for D.P.S -SG- and Super D.P.S // for Y27 - char tvar[10][22]; + char tvar[10][33]; int tvar_index, tvar_maxlen; // デバッグログ From d18f4417226b3cc1ea8a647894f69dc0c78fb5fe Mon Sep 17 00:00:00 2001 From: kichikuou Date: Sat, 23 May 2020 11:30:03 +0900 Subject: [PATCH 11/14] Merge upstream changes: Merge the remaining nact_sys1 changes - cmd_branch: Uses getw when skipping 2-byte objects - cmd_y: Restructured, but functionally identical --- src/sys/nact_sys1.cpp | 290 ++++++++++++++++++++---------------------- 1 file changed, 140 insertions(+), 150 deletions(-) diff --git a/src/sys/nact_sys1.cpp b/src/sys/nact_sys1.cpp index 3c5c676..f394c82 100644 --- a/src/sys/nact_sys1.cpp +++ b/src/sys/nact_sys1.cpp @@ -152,19 +152,16 @@ void NACT_Sys1::cmd_branch() break; } } else if(cmd == '@') { - getd(); - getd(); + getw(); } else if(cmd == '\\') { - getd(); - getd(); + getw(); } else if(cmd == '&') { cali(); } else if(cmd == '%') { cali(); } else if(cmd == '$') { if(!set_menu) { - getd(); - getd(); + getw(); set_menu = true; } else { set_menu = false; @@ -172,14 +169,12 @@ void NACT_Sys1::cmd_branch() } else if(cmd == '[') { getd(); getd(); - getd(); - getd(); + getw(); } else if(cmd == ':') { cali(); getd(); getd(); - getd(); - getd(); + getw(); } else if(cmd == ']') { } else if(cmd == 'A') { @@ -1199,157 +1194,152 @@ void NACT_Sys1::cmd_y() output_console("\nY %d,%d:", cmd, param); - switch (crc32_a) { - case CRC32_BUNKASAI: - case CRC32_CRESCENT: - case CRC32_DPS: - case CRC32_FUKEI: - case CRC32_TENGU: + if(crc32_a == CRC32_INTRUDER) { switch(cmd) { - case 0: - ags->clear_text_window(text_window, true); - break; - case 1: - { - char buf[16]; - buf[0] = '0' + (int)(param / 10000); - param %= 10000; - buf[1] = '0' + (int)(param / 1000); - param %= 1000; - buf[2] = '0' + (int)(param / 100); - param %= 100; - buf[3] = '0' + (int)(param / 10); - buf[4] = '0' + (param % 10); - buf[5] = '\0'; - - int p = 0; + case 0: + ags->clear_text_window(text_window, true); + break; + case 1: + if(show_push) { + ags->draw_push(text_window); + } for(;;) { - if(buf[p] != '0') { + if(terminate) { + return; + } + if(get_key()) { break; } - p++; + SDL_Delay(10); } - ags->draw_text(&buf[p < 4 ? p : 4]); - } - break; - case 2: - switch (crc32_a) { - case CRC32_CRESCENT: - for(int i = 39; i <= 48; i++) - var[i] = 0; + SDL_Delay(100); + for(;;) { + if(terminate) { + return; + } + if(!(get_key() & 0x18)) { + break; + } + SDL_Delay(10); + } + ags->clear_text_window(text_window, true); break; - case CRC32_DPS: - for(int i = 0; i <= 20; i++) - var[i] = 0; + case 2: + if(param == 0) { + post_quit = true; + fatal_error = true; + } else { + WAIT(100) + } break; - default: - for(int i = 0; i <= 16; i++) - var[i] = 0; + case 3: + WAIT(param * 1000) break; - } - break; - case 3: - WAIT(param * 1000 / 60) - break; - case 4: - RND = (param == 0 || param == 1) ? 0 : random(param); - break; - case 7: - if(crc32_a == CRC32_DPS && param == 1) { - ags->box_fill(0, 40, 8, 598, 270, 0); - } - break; - case 130: - if (crc32_a == CRC32_TENGU) { - WAIT(2000) - ags->load_cg(180, -1); - - WAIT(2000) - ags->draw_box(0); - ags->dest_screen = 1; - ags->load_cg(173, -1); - ags->dest_screen = 0; - ags->gcopy(0x1ecd, 0x3a2a, 8, 60, 3); - WAIT(667); - ags->gcopy(0x1b65, 0x262e, 8, 60, 3); - ags->gcopy(0x2e25, 0x38ee, 7, 9, 3); - WAIT(667); - ags->gcopy(0x1914, 0x1914, 8, 63, 3); - WAIT(667); - ags->gcopy(0x182c, 0x182c, 7, 50, 3); - WAIT(667); - ags->gcopy(0x0000, 0x1ecd, 32, 60, 1); - WAIT(667); - for(int i = 12; i <= 57; i++) { - ags->gcopy(i + 0x2306, i + 0x2306, 1, 165, 3); - } - WAIT_KEYQUIT(6000) - ags->draw_box(param); - } - break; - case 253: - post_quit = false; - fatal_error = true; - break; - case 254: - RND = 0; - break; - case 255: - if (crc32_a == CRC32_DPS) - post_quit = false; - else - post_quit = true; - fatal_error = true; - break; - } - break; - case CRC32_INTRUDER: - switch(cmd) { - case 0: - ags->clear_text_window(text_window, true); - break; - case 1: - if(show_push) { - ags->draw_push(text_window); - } - for(;;) { - if(terminate) { - return; - } - if(get_key()) { - break; - } - SDL_Delay(10); - } - SDL_Delay(100); - for(;;) { - if(terminate) { - return; - } - if(!(get_key() & 0x18)) { - break; - } - SDL_Delay(10); - } - ags->clear_text_window(text_window, true); - break; - case 2: - if(param == 0) { + case 255: post_quit = true; fatal_error = true; - } else { - WAIT(100) - } - break; - case 3: - WAIT(param * 1000) - break; - case 255: - post_quit = true; - fatal_error = true; - break; + break; + } + } else { + switch(cmd) { + case 0: + ags->clear_text_window(text_window, true); + break; + case 1: + { + char buf[16]; + buf[0] = '0' + (int)(param / 10000); + param %= 10000; + buf[1] = '0' + (int)(param / 1000); + param %= 1000; + buf[2] = '0' + (int)(param / 100); + param %= 100; + buf[3] = '0' + (int)(param / 10); + buf[4] = '0' + (param % 10); + buf[5] = '\0'; + + int p = 0; + for(;;) { + if(buf[p] != '0') { + break; + } + p++; + } + ags->draw_text(&buf[p < 4 ? p : 4]); + } + break; + case 2: + if(crc32_a == CRC32_CRESCENT) { + for(int i = 39; i <= 48; i++) { + var[i] = 0; + } + } else if(crc32_a == CRC32_DPS || crc32_a == CRC32_DPS_SG || crc32_a == CRC32_DPS_SG2 || crc32_a == CRC32_DPS_SG3) { + for(int i = 0; i <= 20; i++) { + var[i] = 0; + } + } else { + for(int i = 0; i <= 16; i++) { + var[i] = 0; + } + } + break; + case 3: + WAIT(param * 1000 / 60) + break; + case 4: + RND = (param == 0 || param == 1) ? 0 : random(param); + break; + case 7: + if(crc32_a == CRC32_DPS || crc32_a == CRC32_DPS_SG || crc32_a == CRC32_DPS_SG2 || crc32_a == CRC32_DPS_SG3) { + if(param == 1) { + ags->box_fill(0, 40, 8, 598, 270, 0); + } + } + break; + case 130: + if(crc32_a == CRC32_TENGU) { + WAIT(2000) + ags->load_cg(180, -1); + + WAIT(2000) + ags->draw_box(0); + ags->dest_screen = 1; + ags->load_cg(173, -1); + ags->dest_screen = 0; + ags->gcopy(0x1ecd, 0x3a2a, 8, 60, 3); + WAIT(667); + ags->gcopy(0x1b65, 0x262e, 8, 60, 3); + ags->gcopy(0x2e25, 0x38ee, 7, 9, 3); + WAIT(667); + ags->gcopy(0x1914, 0x1914, 8, 63, 3); + WAIT(667); + ags->gcopy(0x182c, 0x182c, 7, 50, 3); + WAIT(667); + ags->gcopy(0x0000, 0x1ecd, 32, 60, 1); + WAIT(667); + for(int i = 12; i <= 57; i++) { + ags->gcopy(i + 0x2306, i + 0x2306, 1, 165, 3); + } + WAIT_KEYQUIT(6000) + ags->draw_box(param); + } + break; + case 253: + post_quit = false; + fatal_error = true; + break; + case 254: + RND = 0; + break; + case 255: + if(crc32_a == CRC32_DPS || crc32_a == CRC32_DPS_SG || crc32_a == CRC32_DPS_SG2 || crc32_a == CRC32_DPS_SG3) { + post_quit = false; + } else { + post_quit = true; + } + fatal_error = true; + break; } - break; } } From aa5a8f3a529b0c6aafcab99a125c93f8833a3447 Mon Sep 17 00:00:00 2001 From: kichikuou Date: Sat, 23 May 2020 12:08:40 +0900 Subject: [PATCH 12/14] Merge upstream changes: Merge the remaining nact_sys2 changes Mostly mechanically merged, I haven't looked into individual changes in detail. --- src/sys/nact_sys2.cpp | 192 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 164 insertions(+), 28 deletions(-) diff --git a/src/sys/nact_sys2.cpp b/src/sys/nact_sys2.cpp index 21c44d9..0cb8122 100644 --- a/src/sys/nact_sys2.cpp +++ b/src/sys/nact_sys2.cpp @@ -101,19 +101,16 @@ void NACT_Sys2::cmd_branch() break; } } else if(cmd == '@') { - getd(); - getd(); + getw(); } else if(cmd == '\\') { - getd(); - getd(); + getw(); } else if(cmd == '&') { cali(); } else if(cmd == '%') { cali(); } else if(cmd == '$') { if(!set_menu) { - getd(); - getd(); + getw(); set_menu = true; } else { set_menu = false; @@ -121,14 +118,12 @@ void NACT_Sys2::cmd_branch() } else if(cmd == '[') { getd(); getd(); - getd(); - getd(); + getw(); } else if(cmd == ':') { cali(); getd(); getd(); - getd(); - getd(); + getw(); } else if(cmd == ']') { } else if(cmd == 'A') { @@ -164,7 +159,8 @@ void NACT_Sys2::cmd_branch() } else if(cmd == 'I') { cali(); cali(); - getd(); +// getd(); + cali(); } else if(cmd == 'J') { cali(); cali(); @@ -204,11 +200,48 @@ void NACT_Sys2::cmd_branch() cali(); cali(); } else if(cmd == 'U') { - getd(); - getd(); + if(crc32_a == CRC32_YAKATA2) { + cali(); + cali(); + } else { + getd(); + getd(); + } } else if(cmd == 'V') { +#if 1 cali(); cali(); + cali(); + cali(); + cali(); + cali(); + cali(); + cali(); + cali(); + cali(); + cali(); + cali(); + cali(); + cali(); + cali(); + cali(); + cali(); + cali(); + cali(); + cali(); + cali(); + cali(); + cali(); + cali(); + cali(); + cali(); + cali(); + cali(); + cali(); +#else + cali(); + cali(); +#endif } else if(cmd == 'W') { cali(); cali(); @@ -760,6 +793,9 @@ void NACT_Sys2::cmd_b() output_console("\nB %d,%d,%d,%d,%d,%d,%d:", cmd, index, p1, p2, p3, p4, p5); if(cmd == 1) { + if(crc32_a == CRC32_AYUMI_FD || crc32_a == CRC32_AYUMI_HINT || crc32_a == CRC32_DRSTOP) { + p5 = 1; + } ags->menu_w[index - 1].sx = p1 * 8; ags->menu_w[index - 1].sy = p2; ags->menu_w[index - 1].ex = p3 * 8 - 1; @@ -772,6 +808,9 @@ void NACT_Sys2::cmd_b() ags->menu_w[index - 1].screen = NULL; } } else if(cmd == 2) { + if(crc32_a == CRC32_AYUMI_FD || crc32_a == CRC32_AYUMI_HINT || crc32_a == CRC32_DRSTOP) { + p1 = 1; + } // if(crc32_a == CRC32_PROSTUDENTG_FD) { // ags->menu_w[index - 1].frame = (index == 1 || index == 3) ? true : false; // } else @@ -795,6 +834,13 @@ void NACT_Sys2::cmd_b() ags->text_w[index - 1].window = NULL; } } else if(cmd == 4) { + if(crc32_a == CRC32_AYUMI_FD || crc32_a == CRC32_AYUMI_HINT) { + p1 = 1; + //p5 ? 0 : 1; // 逆? + p5 = 0; + } else if(crc32_a == CRC32_DRSTOP) { + p1 = 1; + } if(p5 == 0) { // ウィンドウ退避 // if(crc32_a == CRC32_PROSTUDENTG_FD) { @@ -852,6 +898,16 @@ void NACT_Sys2::cmd_g() } } ags->load_cg(page, -1); + + if(crc32_a == CRC32_DALK_HINT) { + if(page == 3) { + WAIT(2000) + } + } else if(crc32_a == CRC32_RANCE3_HINT) { + if(page == 25) { + WAIT(2000) + } + } } void NACT_Sys2::cmd_h() @@ -899,7 +955,8 @@ void NACT_Sys2::cmd_i() { int p1 = cali(); int p2 = cali(); - int p3 = getd(); +// int p3 = getd(); + int p3 = cali(); output_console("\nI %d,%d,%d:", p1, p2, p3); } @@ -1021,7 +1078,7 @@ void NACT_Sys2::cmd_l() void NACT_Sys2::cmd_m() { - char string[22]; + char string[33]; int d, p = 0; while((d = getd()) != ':') { @@ -1038,7 +1095,7 @@ void NACT_Sys2::cmd_m() output_console("\nM %s:", string); if(1 <= tvar_index && tvar_index <= 10) { - memcpy(tvar[tvar_index - 1], string, 22); + memcpy(tvar[tvar_index - 1], string, 33); } } @@ -1058,17 +1115,21 @@ void NACT_Sys2::cmd_o() output_console("\nO %d,%d,%d:", st, width, height); +#if 0 // white mesh int sx = (st % 80) * 8; int sy = (int)(st / 80); ags->draw_mesh(sx, sy, width, height); +#endif } void NACT_Sys2::cmd_p() { int param = getd(); - ags->text_font_color = (uint8)((param & 0x7) + 16); + if(crc32_a != CRC32_YAKATA2 && crc32_a != CRC32_DALK_HINT && crc32_a != CRC32_RANCE3_HINT) { + ags->text_font_color = (uint8)((param & 0x7) + 16); + } output_console("\nP %d:", param); } @@ -1205,8 +1266,15 @@ void NACT_Sys2::cmd_t() void NACT_Sys2::cmd_u() { - int page = getd(); - int transparent = getd(); + int page, transparent; + + if(crc32_a == CRC32_YAKATA2) { + page = cali(); + transparent = cali(); + } else { + page = getd(); + transparent = getd(); + } output_console("\nU %d,%d:", page, transparent); @@ -1215,20 +1283,57 @@ void NACT_Sys2::cmd_u() void NACT_Sys2::cmd_v() { +#if 1 + int p01 = cali(); + int p02 = cali(); + int p03 = cali(); + int p04 = cali(); + int p05 = cali(); + int p06 = cali(); + int p07 = cali(); + int p08 = cali(); + int p09 = cali(); + int p10 = cali(); + int p11 = cali(); + int p12 = cali(); + int p13 = cali(); + int p14 = cali(); + int p15 = cali(); + int p16 = cali(); + int p17 = cali(); + int p18 = cali(); + int p19 = cali(); + int p20 = cali(); + int p21 = cali(); + int p22 = cali(); + int p23 = cali(); + int p24 = cali(); + int p25 = cali(); + int p26 = cali(); + int p27 = cali(); + int p28 = cali(); + int p29 = cali(); + + output_console("\nV %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d:", + p01, p02, p03, p04, p05, p06, p07, p08, p09, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29); +#else int p1 = cali(); int p2 = cali(); output_console("\nV %d,%d:", p1, p2); +#endif } void NACT_Sys2::cmd_w() { - int p1 = cali(); - int p2 = cali(); - int p3 = cali(); - int p4 = cali(); + int sx = cali(); + int sy = cali(); + int ex = cali(); + int ey = cali(); - output_console("\nW %d,%d,%d,%d:", p1, p2, p3, p4); + output_console("\nW %d,%d,%d,%d:", sx, sy, ex, ey); + + ags->draw_mesh(sx, sy, ex - sx, ey - sy); } void NACT_Sys2::cmd_x() @@ -1306,10 +1411,18 @@ void NACT_Sys2::cmd_y() case 26: ags->text_font_size = (param == 1) ? 16 : (param == 2) ? 24 : (param == 3) ? 32 : (param == 4) ? 48 : (param == 5) ? 64 : 16; break; -#if 0 // Broken in Super D.P.S + case 27: + { + int tmp = tvar_index; + tvar_index = param; + tvar_maxlen = 8;//param; + text_dialog(); + tvar_index = tmp; + } + break; case 40: case 42: - { + if(ags->now_fade()) { Uint32 dwStart = SDL_GetTicks(); for(int i = 0; i < 16; i++) { ags->fade_in(i); @@ -1324,11 +1437,13 @@ void NACT_Sys2::cmd_y() SDL_Delay(0); } } + ags->fade_end(); } break; case 41: case 43: - { + if(!ags->now_fade()) { + ags->fade_start(); Uint32 dwStart = SDL_GetTicks(); for(int i = 0; i < 16; i++) { ags->fade_out(i, (cmd == 41) ? false : true); @@ -1345,7 +1460,6 @@ void NACT_Sys2::cmd_y() } } break; -#endif case 221: case 222: case 223: @@ -1376,6 +1490,28 @@ void NACT_Sys2::cmd_y() case 252: RND = 8; break; + case 253: + // キーが押されて離されるまで待機 + for(;;) { + if(terminate) { + return; + } + if(get_key()) { + break; + } + SDL_Delay(10); + } + SDL_Delay(100); + for(;;) { + if(terminate) { + return; + } + if(!(get_key() & 0x18)) { + break; + } + SDL_Delay(10); + } + break; case 254: RND = 0; break; From 11c888e30fb7acd0b2614ba8ea708cbbcc3a242b Mon Sep 17 00:00:00 2001 From: kichikuou Date: Sat, 23 May 2020 12:46:29 +0900 Subject: [PATCH 13/14] Merge upstream changes: Merge readme.txt and history.txt --- history.txt | 34 +++++++++++++++++++++++++++++++++- readme.txt | 12 +++--------- 2 files changed, 36 insertions(+), 10 deletions(-) diff --git a/history.txt b/history.txt index 02b4b44..cec874a 100644 --- a/history.txt +++ b/history.txt @@ -113,10 +113,42 @@ 2016.01.13 文字の描画も24bppで処理するようにしました。 - Y4の乱数生成をxorhift32にしました。 + Y4の乱数生成をxorshift32にしました。 512命令毎にSleep(10)を入れるようにしました。 2016.01.15 あゆみちゃん物語 フルカラー実写版をサポートしました。 キーまたはボタンが離されるまで、メニューを表示しないようにしました。 + +2020.03.21 + + SYSTEM1, SYSTEM2用の実行ファイルを統合しました。 + SYSTEM1, SYSTEM2用のAMUS.MDAをリソースに追加しました。 + + マウス操作でメニューが未選択になっているときに、Enterキーを押して + 誤選択されないようにしました。(thanks system3-sdl2) + 連打によってメニューが誤選択されないように待機時間を追加しました。 + + DRIでファイルサイズをチェックするようにしました。 + DRIでリソースからBMUS.MDA, CMUS.MDAを読み込めるようにしました。 + + Super D.P.Sの画面がフェードしたままになる問題を修正しました。 + (Y40-Y43はそもそもフェード命令ではないかもしれない) + + SYSTEM2のUコマンドで、透明色の指定が101の場合はパレットを取得しない + ようにしました。(婦警さんDA) + SYSTEM2のY2コマンドの引数を、最大文字数でなく、文字列変数番号と + 解釈するようにしました。(Super D.P.S) + + ALICEの館をサポートしました。 + あぶない文化祭前夜をサポートしました。 + 闘神都市 ヒントディスクをサポートしました。(闘神ランスは動作しません) + + ALICEの館IIをサポートしました。(ぱっとん、おかゆは動作しません) + DALK ヒントディスクをサポートしました。(零式は動作しません) + Dr.STOP!をサポートしました。(DRD.COMのオープニングは未移植) + prostudent G (FD版)をサポートしました。 + Rance 3 ヒントディスクをサポートしました。(走り女は動作しません) + あゆみちゃん物語 (FD版)をサポートしました。 + あゆみちゃん物語 ヒントディスクをサポートしました。 diff --git a/readme.txt b/readme.txt index d023a0b..ccd1d00 100644 --- a/readme.txt +++ b/readme.txt @@ -7,16 +7,10 @@ GPL扱いで、適当に。 プロジェクトファイルは以下の通りです。 - crescent.vcproj クレセントムーンがぁる - dsp.vcproj D.P.S. - Dream Program System - fukei.vcproj 婦警さん物語VX - intruder.vcproj Intruder -桜屋敷の探索- - maria.vcproj Super D.P.S. マリアとカンパン - prog_omake.vcproj prostudent G おまけ - sdps.vcproj Super D.P.S. + system1.vcproj SYSTEM1汎用 + system2.vcproj SYSTEM2汎用 system3.vcproj SYSTEM3汎用 - tengu.vcproj あぶないてんぐ伝説 - vampire.vcproj Little Vampire + prog_omake.vcproj prostudent G おまけ 実装上では、近間さんのxsystem35を参考にしています。 旧作の実装については、Ryu1さんが移植されたDOS版や、 From b3019b97ea7139943a6c1b06d32b1b4b070fd727 Mon Sep 17 00:00:00 2001 From: kichikuou Date: Sat, 23 May 2020 12:53:46 +0900 Subject: [PATCH 14/14] Update game_ids in README.md --- README.md | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 93260aa..1a6cb16 100644 --- a/README.md +++ b/README.md @@ -74,17 +74,35 @@ Since System1-3 behave slightly differently depending on the game, `system3` use Here's the list of available game IDs and corresponding titles: | game_id | Title | ----------|-------- +| `bunkasai` | あぶない文化祭前夜 | | `crescent` | クレセントムーンがぁる | | `dps` | D.P.S - Dream Program System | +| `dps_sg_fahren` | D.P.S SG - Fahren Fliegen | +| `dps_sg_katei` | D.P.S SG - 家庭教師はステキなお仕事 | +| `dps_sg_nobunaga` | D.P.S SG - 信長の淫謀 | +| `dps_sg2_antique` | D.P.S SG set2 - ANTIQUE HOUSE | +| `dps_sg2_ikenai` | D.P.S SG set2 - いけない内科検診再び | +| `dps_sg2_akai` | D.P.S SG set2 - 朱い夜 | +| `dps_sg3_rabbit` | D.P.S SG set3 - Rabbit P4P | +| `dps_sg3_shinkon` | D.P.S SG set3 - しんこんさんものがたり | +| `dps_sg3_sotsugyou` | D.P.S SG set3 - 卒業 | | `fukei` | 婦警さんVX | | `intruder` | Intruder -桜屋敷の探索- | | `tengu` | あぶないてんぐ伝説 | +| `toushin_hint` | 闘神都市 ヒントディスク | | `little_vampire` | Little Vampire | +| `yakata` | ALICEの館 | +| `ayumi_fd` | あゆみちゃん物語 | +| `ayumi_hint` | あゆみちゃん物語 ヒントディスク | | `ayumi_proto` | あゆみちゃん物語 PROTO | -| `sdps_maria` | Super D.P.S マリアとカンパン | -| `sdps_tono` | Super D.P.S 遠野の森 | -| `sdps_kaizoku` | Super D.P.S 海賊家業 | +| `dalk_hint` | DALK ヒントディスク | +| `drstop` | Dr. STOP! | | `prog_fd` | Prostudent G (FD) | +| `rance3_hint` | Rance3 ヒントディスク | +| `sdps_maria` | Super D.P.S - マリアとカンパン | +| `sdps_tono` | Super D.P.S - 遠野の森 | +| `sdps_kaizoku` | Super D.P.S - うれしたのし海賊稼業 | +| `yakata2` | ALICEの館II | | `ambivalenz_fd` | AmbivalenZ −二律背反− (FD) | | `ambivalenz_cd` | AmbivalenZ −二律背反− (CD) | | `dps_all` | D.P.S. 全部 | @@ -102,6 +120,7 @@ Here's the list of available game IDs and corresponding titles: | `yakata3_cd` | アリスの館3 (CD) | | `yakata3_fd` | アリスの館3 (FD) | | `hashirionna2` | 走り女2 | +| `toushin2_gd` |闘神都市2 グラフィックディスク | | `toushin2_sp` | 闘神都市2 そして、それから… | | `otome` | 乙女戦記 | | `ningyo` | 人魚 -蘿子- |