diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 103727b..ffa0458 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -9,12 +9,10 @@ if (MSYS) list(APPEND CMAKE_LIBRARY_PATH $ENV{MINGW_PREFIX}/$ENV{MINGW_CHOST}/lib) endif () -add_library(common INTERFACE) - if (ANDROID) add_library(system3 SHARED) - target_sources(common INTERFACE + target_sources(system3 PRIVATE linux/nact_linux.cpp android/mako.cpp ) @@ -23,7 +21,7 @@ if (ANDROID) elseif (EMSCRIPTEN) add_executable(system3) - target_sources(common INTERFACE + target_sources(system3 PRIVATE linux/nact_linux.cpp emscripten/mako.cpp ) @@ -52,61 +50,50 @@ else() # NOT (ANDROID OR EMSCRIPTEN) pkg_check_modules(SDL2MIXER REQUIRED IMPORTED_TARGET SDL2_mixer) set(DEFAULT_FONT_PATH ${CMAKE_INSTALL_PREFIX}/share/system3/fonts/) - target_sources(common INTERFACE sys/mako.cpp) + target_sources(system3 PRIVATE sys/mako.cpp) if (CMAKE_SYSTEM_NAME STREQUAL "Windows") - target_sources(common INTERFACE win/nact_win.cpp) - set(RES1 res1/Script1.rc) - set(RES3 res3/Script1.rc) - target_link_libraries(common INTERFACE winmm) + target_sources(system3 PRIVATE win/nact_win.cpp res3/Script1.rc) + target_link_libraries(system3 PRIVATE winmm) else() - target_sources(common INTERFACE linux/nact_linux.cpp) + target_sources(system3 PRIVATE linux/nact_linux.cpp) endif() - add_executable(system1) - target_sources(system1 PRIVATE sys/nact_sys1.cpp ${RES1} sys/ags_gl3.cpp sys/ags_gm3.cpp sys/ags_vsp2l.cpp) - target_compile_definitions(system1 PRIVATE _SYSTEM1) - target_link_libraries(system1 PRIVATE common) + target_link_libraries(system3 PRIVATE PkgConfig::SDL2 PkgConfig::SDL2TTF PkgConfig::SDL2MIXER) - add_executable(system2) - target_sources(system2 PRIVATE sys/nact_sys2.cpp ${RES1} sys/ags_gl3.cpp sys/ags_pms.cpp) - target_compile_definitions(system2 PRIVATE _SYSTEM2 _SDPS) - target_link_libraries(system2 PRIVATE common) - - add_executable(prog_omake) - target_sources(prog_omake PRIVATE sys/nact_sys3.cpp ${RES3} sys/ags_pms.cpp) - target_compile_definitions(prog_omake PRIVATE _PROG_OMAKE) - target_link_libraries(prog_omake PRIVATE common) - - target_link_libraries(common INTERFACE PkgConfig::SDL2 PkgConfig::SDL2TTF PkgConfig::SDL2MIXER) - - install(TARGETS system1 system2 system3 prog_omake RUNTIME DESTINATION bin) + install(TARGETS system3 RUNTIME DESTINATION bin) install(FILES ../fonts/MTLc3m.ttf ../fonts/MTLc3m.ttf.license DESTINATION share/system3/fonts) endif() -target_sources(common INTERFACE +target_sources(system3 PRIVATE sdlmain.cpp fileio.cpp utfsjis.cpp texthook.cpp sys/ags.cpp + sys/ags_bmp.cpp sys/ags_cursor.cpp sys/ags_draw.cpp + sys/ags_gl3.cpp + sys/ags_gm3.cpp + sys/ags_pms.cpp sys/ags_text.cpp sys/ags_vsp.cpp + sys/ags_vsp2l.cpp sys/ags_window.cpp sys/dri.cpp sys/mako_midi.cpp sys/nact.cpp sys/nact_crc32.cpp sys/nact_input.cpp + sys/nact_sys1.cpp + sys/nact_sys2.cpp + sys/nact_sys3.cpp ) -target_compile_definitions(common INTERFACE +target_compile_definitions(system3 PRIVATE $<$:_DEBUG_CONSOLE> DEFAULT_FONT_PATH="${DEFAULT_FONT_PATH}") -target_include_directories(common INTERFACE . sys) -target_sources(system3 PRIVATE sys/nact_sys3.cpp ${RES3} sys/ags_bmp.cpp sys/ags_pms.cpp) -target_compile_definitions(system3 PRIVATE _SYSTEM3) -target_link_libraries(system3 PRIVATE common) +target_include_directories(system3 PRIVATE . sys) +target_compile_definitions(system3 PRIVATE) diff --git a/src/res1/Script1.rc b/src/res1/Script1.rc deleted file mode 100644 index ee8edde..0000000 --- a/src/res1/Script1.rc +++ /dev/null @@ -1,136 +0,0 @@ -//Microsoft Developer Studio generated resource script. -// -#include "resource.h" - -#define APSTUDIO_READONLY_SYMBOLS -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 2 resource. -// -#include "afxres.h" - -///////////////////////////////////////////////////////////////////////////// -#undef APSTUDIO_READONLY_SYMBOLS - -///////////////////////////////////////////////////////////////////////////// -// 日本語 resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_JPN) -#ifdef _WIN32 -LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT -#pragma code_page(932) -#endif //_WIN32 - -///////////////////////////////////////////////////////////////////////////// -// -// Menu -// - -IDR_MENU1 MENU DISCARDABLE -BEGIN - POPUP "File" - BEGIN - MENUITEM "Restart", ID_RESTART - MENUITEM SEPARATOR - MENUITEM "Exit", ID_EXIT - END - POPUP "Screen" - BEGIN - MENUITEM "Window", ID_SCREEN_WINDOW - MENUITEM "Fullscreen", ID_SCREEN_FULL - END - POPUP "Sound" - BEGIN - MENUITEM "FM Sound", ID_SOUND_FM - MENUITEM "CD Audio", ID_SOUND_CD - END - POPUP "Message" - BEGIN - MENUITEM "Skip", ID_TEXT_SKIP - MENUITEM "Wait", ID_TEXT_WAIT - END -END - - -#ifdef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// TEXTINCLUDE -// - -1 TEXTINCLUDE DISCARDABLE -BEGIN - "resource.h\0" -END - -2 TEXTINCLUDE DISCARDABLE -BEGIN - "#include ""afxres.h""\r\n" - "\0" -END - -3 TEXTINCLUDE DISCARDABLE -BEGIN - "\r\n" - "\0" -END - -#endif // APSTUDIO_INVOKED - - -///////////////////////////////////////////////////////////////////////////// -// -// Icon -// - -// Icon with lowest ID value placed first to ensure application icon -// remains consistent on all systems. -IDI_ICON1 ICON DISCARDABLE "icon1.ico" - -///////////////////////////////////////////////////////////////////////////// -// -// Dialog -// - -IDD_DIALOG1 DIALOG DISCARDABLE 0, 0, 122, 55 -STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "文字列の入力" -FONT 9, "MS Pゴシック" -BEGIN - EDITTEXT IDC_EDITBOX,7,15,112,12 - LTEXT "文字を入力してください(最大8文字)",IDC_TEXT,7,3,112,8 - DEFPUSHBUTTON "OK",IDOK,35,36,50,14 -END - - -///////////////////////////////////////////////////////////////////////////// -// -// DESIGNINFO -// - -#ifdef APSTUDIO_INVOKED -GUIDELINES DESIGNINFO DISCARDABLE -BEGIN - IDD_DIALOG1, DIALOG - BEGIN - LEFTMARGIN, 7 - TOPMARGIN, 7 - END -END -#endif // APSTUDIO_INVOKED - -#endif // 日本語 resources -///////////////////////////////////////////////////////////////////////////// - - - -#ifndef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 3 resource. -// - - -///////////////////////////////////////////////////////////////////////////// -#endif // not APSTUDIO_INVOKED - diff --git a/src/res1/icon1.ico b/src/res1/icon1.ico deleted file mode 100644 index 47c22f2..0000000 Binary files a/src/res1/icon1.ico and /dev/null differ diff --git a/src/res1/resource.h b/src/res1/resource.h deleted file mode 100644 index a3c33a3..0000000 --- a/src/res1/resource.h +++ /dev/null @@ -1,28 +0,0 @@ -//{{NO_DEPENDENCIES}} -// Microsoft Developer Studio generated include file. -// Used by Script1.rc -// -#define IDR_MENU1 101 -#define IDI_ICON1 102 -#define IDD_DIALOG1 103 -#define IDC_TEXT 104 -#define IDC_EDITBOX 105 -#define ID_RESTART 40001 -#define ID_EXIT 40002 -#define ID_SCREEN_WINDOW 40003 -#define ID_SCREEN_FULL 40004 -#define ID_SOUND_FM 40005 -#define ID_SOUND_CD 40006 -#define ID_TEXT_SKIP 40007 -#define ID_TEXT_WAIT 40008 - -// Next default values for new objects -// -#ifdef APSTUDIO_INVOKED -#ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 118 -#define _APS_NEXT_COMMAND_VALUE 40009 -#define _APS_NEXT_CONTROL_VALUE 1000 -#define _APS_NEXT_SYMED_VALUE 101 -#endif -#endif diff --git a/src/res2/Script1.rc b/src/res2/Script1.rc deleted file mode 100644 index ee8edde..0000000 --- a/src/res2/Script1.rc +++ /dev/null @@ -1,136 +0,0 @@ -//Microsoft Developer Studio generated resource script. -// -#include "resource.h" - -#define APSTUDIO_READONLY_SYMBOLS -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 2 resource. -// -#include "afxres.h" - -///////////////////////////////////////////////////////////////////////////// -#undef APSTUDIO_READONLY_SYMBOLS - -///////////////////////////////////////////////////////////////////////////// -// 日本語 resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_JPN) -#ifdef _WIN32 -LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT -#pragma code_page(932) -#endif //_WIN32 - -///////////////////////////////////////////////////////////////////////////// -// -// Menu -// - -IDR_MENU1 MENU DISCARDABLE -BEGIN - POPUP "File" - BEGIN - MENUITEM "Restart", ID_RESTART - MENUITEM SEPARATOR - MENUITEM "Exit", ID_EXIT - END - POPUP "Screen" - BEGIN - MENUITEM "Window", ID_SCREEN_WINDOW - MENUITEM "Fullscreen", ID_SCREEN_FULL - END - POPUP "Sound" - BEGIN - MENUITEM "FM Sound", ID_SOUND_FM - MENUITEM "CD Audio", ID_SOUND_CD - END - POPUP "Message" - BEGIN - MENUITEM "Skip", ID_TEXT_SKIP - MENUITEM "Wait", ID_TEXT_WAIT - END -END - - -#ifdef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// TEXTINCLUDE -// - -1 TEXTINCLUDE DISCARDABLE -BEGIN - "resource.h\0" -END - -2 TEXTINCLUDE DISCARDABLE -BEGIN - "#include ""afxres.h""\r\n" - "\0" -END - -3 TEXTINCLUDE DISCARDABLE -BEGIN - "\r\n" - "\0" -END - -#endif // APSTUDIO_INVOKED - - -///////////////////////////////////////////////////////////////////////////// -// -// Icon -// - -// Icon with lowest ID value placed first to ensure application icon -// remains consistent on all systems. -IDI_ICON1 ICON DISCARDABLE "icon1.ico" - -///////////////////////////////////////////////////////////////////////////// -// -// Dialog -// - -IDD_DIALOG1 DIALOG DISCARDABLE 0, 0, 122, 55 -STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "文字列の入力" -FONT 9, "MS Pゴシック" -BEGIN - EDITTEXT IDC_EDITBOX,7,15,112,12 - LTEXT "文字を入力してください(最大8文字)",IDC_TEXT,7,3,112,8 - DEFPUSHBUTTON "OK",IDOK,35,36,50,14 -END - - -///////////////////////////////////////////////////////////////////////////// -// -// DESIGNINFO -// - -#ifdef APSTUDIO_INVOKED -GUIDELINES DESIGNINFO DISCARDABLE -BEGIN - IDD_DIALOG1, DIALOG - BEGIN - LEFTMARGIN, 7 - TOPMARGIN, 7 - END -END -#endif // APSTUDIO_INVOKED - -#endif // 日本語 resources -///////////////////////////////////////////////////////////////////////////// - - - -#ifndef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 3 resource. -// - - -///////////////////////////////////////////////////////////////////////////// -#endif // not APSTUDIO_INVOKED - diff --git a/src/res2/icon1.ico b/src/res2/icon1.ico deleted file mode 100644 index 47c22f2..0000000 Binary files a/src/res2/icon1.ico and /dev/null differ diff --git a/src/res2/resource.h b/src/res2/resource.h deleted file mode 100644 index a3c33a3..0000000 --- a/src/res2/resource.h +++ /dev/null @@ -1,28 +0,0 @@ -//{{NO_DEPENDENCIES}} -// Microsoft Developer Studio generated include file. -// Used by Script1.rc -// -#define IDR_MENU1 101 -#define IDI_ICON1 102 -#define IDD_DIALOG1 103 -#define IDC_TEXT 104 -#define IDC_EDITBOX 105 -#define ID_RESTART 40001 -#define ID_EXIT 40002 -#define ID_SCREEN_WINDOW 40003 -#define ID_SCREEN_FULL 40004 -#define ID_SOUND_FM 40005 -#define ID_SOUND_CD 40006 -#define ID_TEXT_SKIP 40007 -#define ID_TEXT_WAIT 40008 - -// Next default values for new objects -// -#ifdef APSTUDIO_INVOKED -#ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 118 -#define _APS_NEXT_COMMAND_VALUE 40009 -#define _APS_NEXT_CONTROL_VALUE 1000 -#define _APS_NEXT_SYMED_VALUE 101 -#endif -#endif diff --git a/src/sdlmain.cpp b/src/sdlmain.cpp index 80b1e2e..c932a91 100644 --- a/src/sdlmain.cpp +++ b/src/sdlmain.cpp @@ -17,23 +17,13 @@ int main(int argc, char *argv[]) { SDL_Init(SDL_INIT_VIDEO); - // 繧ヲ繧」繝ウ繝峨え陦ィ遉コ - char buf[128]; -#if defined(_SYSTEM1) - strcpy_s(buf, 128, "Scenario Decoder SYSTEM1"); -#elif defined(_SYSTEM2) - strcpy_s(buf, 128, "Scenario Decoder SYSTEM2"); -#else - strcpy_s(buf, 128, "Scenario Decoder SYSTEM3"); -#endif - #ifdef __ANDROID__ SDL_SetHint(SDL_HINT_ORIENTATIONS, "LandscapeLeft LandscapeRight"); Uint32 flags = SDL_WINDOW_FULLSCREEN; #else Uint32 flags = 0; #endif - g_window = SDL_CreateWindow(buf, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 400, flags); + g_window = SDL_CreateWindow("Scenario Decoder SYSTEM3", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 400, flags); const char* font_file = DEFAULT_FONT_PATH "MTLc3m.ttf"; const char* playlist = NULL; @@ -56,7 +46,7 @@ int main(int argc, char *argv[]) } // system3 蛻晄悄蛹� - NACT* nact = new NACT(game_id, font_file, playlist); + NACT* nact = NACT::create(game_id, font_file, playlist); if (save_dir[0]) { #ifdef __ANDROID__ @@ -72,13 +62,8 @@ int main(int argc, char *argv[]) const char* title = nact->get_title(); if (title) { -#if defined(_SYSTEM1) - sprintf_s(buf, 128, "Scenario Decoder SYSTEM1: %s", title); -#elif defined(_SYSTEM2) - sprintf_s(buf, 128, "Scenario Decoder SYSTEM2: %s", title); -#else - sprintf_s(buf, 128, "Scenario Decoder SYSTEM3: %s", title); -#endif + char buf[128]; + sprintf_s(buf, 128, "Scenario Decoder SYSTEM%d: %s", nact->sys_ver, title); #ifdef __EMSCRIPTEN__ EM_ASM_ARGS({ xsystem35.shell.setWindowTitle(UTF8ToString($0)); }, buf); #else diff --git a/src/sys/ags.cpp b/src/sys/ags.cpp index fb6ab25..3dbb49e 100644 --- a/src/sys/ags.cpp +++ b/src/sys/ags.cpp @@ -128,23 +128,23 @@ AGS::AGS(NACT* parent, const char* fontfile) : nact(parent) program_palette[0x0d] = SETPALETTE16(0x0, 0xf, 0xf); program_palette[0x0e] = SETPALETTE16(0xf, 0xf, 0x0); program_palette[0x0f] = SETPALETTE16(0xf, 0xf, 0xf); -#if defined(_SYSTEM1) - program_palette[0x10] = SETPALETTE16(0x0, 0x0, 0x0); - program_palette[0x11] = SETPALETTE16(0x0, 0x0, 0xf); - program_palette[0x12] = SETPALETTE16(0xf, 0x0, 0x0); - program_palette[0x13] = SETPALETTE16(0xf, 0x0, 0xf); - program_palette[0x14] = SETPALETTE16(0x0, 0xf, 0x0); - program_palette[0x15] = SETPALETTE16(0x0, 0xf, 0xf); - program_palette[0x16] = SETPALETTE16(0xf, 0xf, 0x0); - program_palette[0x17] = SETPALETTE16(0xf, 0xf, 0xf); - program_palette[0x18] = SETPALETTE16(0x0, 0x0, 0x0); - program_palette[0x19] = SETPALETTE16(0x0, 0x0, 0xf); - program_palette[0x1a] = SETPALETTE16(0xf, 0x0, 0x0); - program_palette[0x1b] = SETPALETTE16(0xf, 0x0, 0xf); - program_palette[0x1c] = SETPALETTE16(0x0, 0xf, 0x0); - program_palette[0x1d] = SETPALETTE16(0x0, 0xf, 0xf); - program_palette[0x1e] = SETPALETTE16(0xf, 0xf, 0x0); -#endif + if (nact->sys_ver == 1) { + program_palette[0x10] = SETPALETTE16(0x0, 0x0, 0x0); + program_palette[0x11] = SETPALETTE16(0x0, 0x0, 0xf); + program_palette[0x12] = SETPALETTE16(0xf, 0x0, 0x0); + program_palette[0x13] = SETPALETTE16(0xf, 0x0, 0xf); + program_palette[0x14] = SETPALETTE16(0x0, 0xf, 0x0); + program_palette[0x15] = SETPALETTE16(0x0, 0xf, 0xf); + program_palette[0x16] = SETPALETTE16(0xf, 0xf, 0x0); + program_palette[0x17] = SETPALETTE16(0xf, 0xf, 0xf); + program_palette[0x18] = SETPALETTE16(0x0, 0x0, 0x0); + program_palette[0x19] = SETPALETTE16(0x0, 0x0, 0xf); + program_palette[0x1a] = SETPALETTE16(0xf, 0x0, 0x0); + program_palette[0x1b] = SETPALETTE16(0xf, 0x0, 0xf); + program_palette[0x1c] = SETPALETTE16(0x0, 0xf, 0x0); + program_palette[0x1d] = SETPALETTE16(0x0, 0xf, 0xf); + program_palette[0x1e] = SETPALETTE16(0xf, 0xf, 0x0); + } program_palette[0x1f] = SETPALETTE16(0xf, 0xf, 0xf); program_palette[0x2f] = SETPALETTE16(0xf, 0xf, 0xf); program_palette[0x3f] = SETPALETTE16(0xf, 0xf, 0xf); @@ -170,7 +170,6 @@ AGS::AGS(NACT* parent, const char* fontfile) : nact(parent) for(int i = 0; i < 10; i++) { // ウィンドウの初期位置はシステムによって異なる switch (nact->crc32) { -#if defined(_SYSTEM1) case CRC32_BUNKASAI: SET_TEXT(i, 24, 304, 616, 384, false); SET_MENU(i, 440, 18, 620, 178, true); @@ -201,7 +200,6 @@ AGS::AGS(NACT* parent, const char* fontfile) : nact(parent) SET_TEXT(i, 8, 255, 615, 383, false); SET_MENU(i, 448, 11, 615, 224, false); break; -#endif default: SET_TEXT(i, 8, 311, 623, 391, true); SET_MENU(i, 464, 80, 623, 240, true); @@ -221,22 +219,22 @@ AGS::AGS(NACT* parent, const char* fontfile) : nact(parent) // SET_BOX(i, 0, 0, 0, 631, 399); SET_BOX(i, 0, 0, 0, 639, 399); } -#if defined(_SYSTEM2) - if(nact->crc32 == CRC32_SDPS_TONO || nact->crc32 == CRC32_SDPS_KAIZOKU) { - SET_BOX(0, 0, 40, 8, 598, 271); - } else if(nact->crc32 == 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); - SET_BOX(3, 0, 0, 0, 319, 399); - SET_BOX(4, 0, (16*8), 310, ((77*8)-1), 390); - SET_BOX(5, 0, (4*8), 310, ((76*8)-1), 390); - SET_BOX(6, 0, (2*8), 317, ((56*8)-1), 389); - SET_BOX(7, 15, 64, 13, 407, 289); - SET_BOX(8, 0, 0, 0, 319, 399); - SET_BOX(9, 0, 320, 0, 639, 40); + if (nact->sys_ver == 2) { + if (nact->crc32 == CRC32_SDPS_TONO || nact->crc32 == CRC32_SDPS_KAIZOKU) { + SET_BOX(0, 0, 40, 8, 598, 271); + } else if (nact->crc32 == 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); + SET_BOX(3, 0, 0, 0, 319, 399); + SET_BOX(4, 0, (16*8), 310, ((77*8)-1), 390); + SET_BOX(5, 0, (4*8), 310, ((76*8)-1), 390); + SET_BOX(6, 0, (2*8), 317, ((56*8)-1), 389); + SET_BOX(7, 15, 64, 13, 407, 289); + SET_BOX(8, 0, 0, 0, 319, 399); + SET_BOX(9, 0, 320, 0, 639, 40); + } } -#endif // 画面選択 src_screen = dest_screen = 0; @@ -250,29 +248,29 @@ AGS::AGS(NACT* parent, const char* fontfile) : nact(parent) text_dest_y = text_w[0].sy + 2; text_space = 2; text_font_size = 16; -#if defined(_SYSTEM1) - text_font_color = 15 + 16; - text_frame_color = 15 + 16; - text_back_color = 0 + 16; -#else - text_font_color = 15; - text_frame_color = 15; - text_back_color = 0; -#endif + if (nact->sys_ver == 1) { + text_font_color = 15 + 16; + text_frame_color = 15 + 16; + text_back_color = 0 + 16; + } else { + text_font_color = 15; + text_frame_color = 15; + text_back_color = 0; + } // メニュー表示 menu_dest_x = 2; menu_dest_y = 0; menu_font_size = 16; -#if defined(_SYSTEM1) - menu_font_color = 15 + 16; - menu_frame_color = 15 + 16; - menu_back_color = 0 + 16; -#else - menu_font_color = 15; - menu_frame_color = 15; - menu_back_color = 0; -#endif + if (nact->sys_ver == 1) { + menu_font_color = 15 + 16; + menu_frame_color = 15 + 16; + menu_back_color = 0 + 16; + } else { + menu_font_color = 15; + menu_frame_color = 15; + menu_back_color = 0; + } menu_fix = false; draw_hankaku = false; @@ -413,13 +411,12 @@ void AGS::flush_screen(bool update) uint32* src = vram[0][y]; uint32* dest = surface_line(hBmpDest, y); for(int x = 0; x < 640; x++) { -#if defined(_SYSTEM3) - // あゆみちゃん物語 フルカラー実写版 - if(src[x] & 0x80000000) { + if (nact->sys_ver == 3 && src[x] & 0x80000000) { + // あゆみちゃん物語 フルカラー実写版 dest[x] = src[x] & 0xffffff; - } else -#endif - dest[x] = screen_palette[src[x] & 0xff]; + } else { + dest[x] = screen_palette[src[x] & 0xff]; + } } } } @@ -434,13 +431,12 @@ void AGS::draw_screen(int sx, int sy, int width, int height) uint32* dest = &fader_screen[640 * y]; for(int x = sx; x < (sx + width) && x < 640; x++) { uint32 a=src[x]; -#if defined(_SYSTEM3) - // あゆみちゃん物語 フルカラー実写版 - if(src[x] & 0x80000000) { + if (nact->sys_ver == 3 && src[x] & 0x80000000) { + // あゆみちゃん物語 フルカラー実写版 dest[x] = src[x] & 0xffffff; - } else -#endif - dest[x] = screen_palette[src[x] & 0xff]; + } else { + dest[x] = screen_palette[src[x] & 0xff]; + } } } } else { @@ -449,13 +445,12 @@ void AGS::draw_screen(int sx, int sy, int width, int height) uint32* dest = surface_line(hBmpDest, y); for(int x = sx; x < (sx + width) && x < 640; x++) { uint32 a=src[x]; -#if defined(_SYSTEM3) - // あゆみちゃん物語 フルカラー実写版 - if(src[x] & 0x80000000) { + if (nact->sys_ver == 3 && src[x] & 0x80000000) { + // あゆみちゃん物語 フルカラー実写版 dest[x] = src[x] & 0xffffff; - } else -#endif - dest[x] = screen_palette[src[x] & 0xff]; + } else { + dest[x] = screen_palette[src[x] & 0xff]; + } } } invalidate_screen(sx, sy, width, height); diff --git a/src/sys/ags.h b/src/sys/ags.h index a41fc9b..ac66269 100644 --- a/src/sys/ags.h +++ b/src/sys/ags.h @@ -59,19 +59,12 @@ private: SDL_Cursor* hCursor[10]; // AGS -#if defined(_SYSTEM1) 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); -#else - void load_gl3(uint8* data, int page, int transparent); // あぶない天狗伝説 - void load_vsp(uint8* data, int page, int transparent); void load_pms(uint8* data, int page, int transparent); -#endif -#if defined(_SYSTEM3) void load_bmp(const char *file_path); -#endif 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_draw.cpp b/src/sys/ags_draw.cpp index ea65f13..61a9621 100644 --- a/src/sys/ags_draw.cpp +++ b/src/sys/ags_draw.cpp @@ -12,61 +12,65 @@ extern char g_root[_MAX_PATH]; void AGS::load_cg(int page, int transparent) { -#if defined(_SYSTEM3) - // あゆみちゃん物語 フルカラー実写版 - 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); - 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); - return; + 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); + 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); + return; + } } -#endif DRI* dri = new DRI(); int size; uint8* data = dri->load(acg, page, &size); if(data && size > 0) { -#if defined(_SYSTEM1) - switch (nact->crc32) { - case CRC32_BUNKASAI: - load_vsp(data, page, transparent); + switch (nact->sys_ver) { + case 1: + switch (nact->crc32) { + case CRC32_BUNKASAI: + load_vsp(data, page, transparent); + break; + case CRC32_INTRUDER: + // load_gm3(data, page, transparent); + load_vsp(data, page, transparent); // 暫定 + break; + case CRC32_VAMPIRE: + load_vsp2l(data, page, transparent); + break; + default: + load_gl3(data, page, transparent); + break; + } break; - case CRC32_INTRUDER: - // load_gm3(data, page, transparent); - load_vsp(data, page, transparent); // 暫定 + case 2: + if(nact->crc32 == 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) { + // Super D.P.S + load_pms(data, page, transparent); + } else { + if(data[0x8] == 0) { + load_vsp(data, page, transparent); + } else { + load_pms(data, page, transparent); + } + } break; - case CRC32_VAMPIRE: - load_vsp2l(data, page, transparent); - break; - default: - load_gl3(data, page, transparent); - break; - } -#elif defined(_SYSTEM2) - if(nact->crc32 == 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) { - // Super D.P.S - load_pms(data, page, transparent); - } else { + case 3: if(data[0x8] == 0) { load_vsp(data, page, transparent); } else { load_pms(data, page, transparent); } + break; } -#else - if(data[0x8] == 0) { - load_vsp(data, page, transparent); - } else { - load_pms(data, page, transparent); - } -#endif } if (data) free(data); diff --git a/src/sys/ags_pms.cpp b/src/sys/ags_pms.cpp index a8bb1c6..bcc0af8 100644 --- a/src/sys/ags_pms.cpp +++ b/src/sys/ags_pms.cpp @@ -40,7 +40,6 @@ void AGS::load_pms(uint8* data, int page, int transparent) tmp_palette[i * 16 + j] = SETPALETTE256(r, g, b); } } -#if defined(_SYSTEM3) if(nact->crc32 == CRC32_RANCE41 || nact->crc32 == CRC32_RANCE42 || nact->crc32 == CRC32_HASHIRIONNA2) { // 上下16色は取得しない for(int i = 1; i < 15; i++) { @@ -60,7 +59,6 @@ void AGS::load_pms(uint8* data, int page, int transparent) } } } else { -#endif for(int i = 0; i < 16; i++) { for(int j = 0; j < 16; j++) { if(!(mask & (0x01 << i))) { @@ -68,44 +66,41 @@ void AGS::load_pms(uint8* data, int page, int transparent) } } } -#if defined(_SYSTEM3) } -#endif } // パレット展開 -#if defined(_SYSTEM3) - 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) { - // 上下16色は展開しない - for(int i = 1; i < 15; i++) { - for(int j = 0; j < 16; j++) { - if(!(mask & (0x01 << i))) { - screen_palette[i * 16 + j] = program_palette[i * 16 + j]; + 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) { + // 上下16色は展開しない + for(int i = 1; i < 15; i++) { + for(int j = 0; j < 16; j++) { + if(!(mask & (0x01 << i))) { + screen_palette[i * 16 + j] = program_palette[i * 16 + j]; + } } } - } - } else if(nact->crc32 == CRC32_MUGENHOUYOU && transparent != -1) { - // Uコマンドでは上下32色は展開しない - for(int i = 2; i < 14; i++) { - for(int j = 0; j < 16; j++) { - if(!(mask & (0x01 << i))) { - screen_palette[i * 16 + j] = program_palette[i * 16 + j]; + } else if(nact->crc32 == CRC32_MUGENHOUYOU && transparent != -1) { + // Uコマンドでは上下32色は展開しない + for(int i = 2; i < 14; i++) { + for(int j = 0; j < 16; j++) { + if(!(mask & (0x01 << i))) { + screen_palette[i * 16 + j] = program_palette[i * 16 + j]; + } } } - } - } else { - for(int i = 0; i < 16; i++) { - for(int j = 0; j < 16; j++) { - if(!(mask & (0x01 << i))) { - screen_palette[i * 16 + j] = program_palette[i * 16 + j]; + } else { + for(int i = 0; i < 16; i++) { + for(int j = 0; j < 16; j++) { + if(!(mask & (0x01 << i))) { + screen_palette[i * 16 + j] = program_palette[i * 16 + j]; + } } } } } - } -#else - if(extract_palette && extract_palette_cg[page]) { + } else if(extract_palette && extract_palette_cg[page]) { for(int i = 0; i < 16; i++) { for(int j = 0; j < 16; j++) { if(!(mask & (0x01 << i))) { @@ -114,7 +109,6 @@ void AGS::load_pms(uint8* data, int page, int transparent) } } } -#endif // PMS展開 uint8 cgdata[3][640]; diff --git a/src/sys/ags_vsp.cpp b/src/sys/ags_vsp.cpp index c58626f..3a0214c 100644 --- a/src/sys/ags_vsp.cpp +++ b/src/sys/ags_vsp.cpp @@ -28,17 +28,13 @@ void AGS::load_vsp(uint8* data, int page, int transparent) } // Zコマンドの処理 -#if defined(_SYSTEM3) if(nact->crc32 == CRC32_AMBIVALENZ_FD || nact->crc32 == CRC32_AMBIVALENZ_CD) { // Z 0,numを無視する } else { -#endif if(palette_bank != -1) { base = (palette_bank & 0x0f) << 4; } -#if defined(_SYSTEM3) } -#endif // パレット取得 if(get_palette) { @@ -52,7 +48,6 @@ void AGS::load_vsp(uint8* data, int page, int transparent) } // パレット展開 -#if defined(_SYSTEM3) if(nact->crc32 == CRC32_FUNNYBEE_FD || nact->crc32 == CRC32_FUNNYBEE_CD || nact->crc32 == CRC32_FUNNYBEE_PATCH) { if(extract_palette_cg[page]) { for(int i = 0; i < 16; i++) { @@ -60,15 +55,12 @@ void AGS::load_vsp(uint8* data, int page, int transparent) } } } else { -#endif if(extract_palette && extract_palette_cg[page]) { for(int i = 0; i < 16; i++) { screen_palette[base + i] = program_palette[base + i]; } } -#if defined(_SYSTEM3) } -#endif // VSP展開 uint8 cgdata[4][2][480], mask = 0; diff --git a/src/sys/crc32.h b/src/sys/crc32.h index 0926cc4..b5840ab 100644 --- a/src/sys/crc32.h +++ b/src/sys/crc32.h @@ -8,7 +8,6 @@ #define _CRC32_H_ // ADISK.DATの先頭256bytes -#if defined(_SYSTEM1) #define CRC32_CRESCENT 0x42351f2c // クレセントムーンがぁる #define CRC32_DPS 0x69ea4865 // D.P.S. - Dream Program System @@ -18,8 +17,6 @@ #define CRC32_VAMPIRE 0x957bcfbf // Little Vampire #define CRC32_BUNKASAI 0 // あぶない文化祭前夜? (未確認) -#elif defined(_SYSTEM2) - #define CRC32_AYUMI_PROTO 0x4e2f5678 // あゆみちゃん物語 PROTO #define CRC32_SDPS 0xc7a20cdf // Super D.P.S #define CRC32_SDPS_MARIA 0x80d4eaca // マリアとカンパン @@ -27,8 +24,6 @@ #define CRC32_SDPS_KAIZOKU 0xf81829e3 // 海賊家業 #define CRC32_PROSTUDENTG_FD 0x5ffbfee7 // Prostudent -G- (FD) -#else - #define CRC32_AMBIVALENZ_FD 0xa6b48dfe // AmbivalenZ (FD) #define CRC32_AMBIVALENZ_CD 0x4b10db69 // AmbivalenZ (CD) #define CRC32_DPSALL 0xd48b4ec6 // DPS全部 @@ -52,5 +47,3 @@ #define CRC32_MUGENHOUYOU 0xbb27d1ba // 夢幻泡影 #endif - -#endif diff --git a/src/sys/dri.cpp b/src/sys/dri.cpp index f4631c4..5f79c70 100644 --- a/src/sys/dri.cpp +++ b/src/sys/dri.cpp @@ -77,11 +77,6 @@ uint8* DRI::load(const char* path, int page, int* size) uint8* DRI::load_mda(uint32 crc32, int page, int* size) { -#if defined(_SYSTEM1) - return NULL; -#elif defined(_SYSTEM2) - return NULL; -#else // データ取得 const char* fname = NULL; @@ -175,6 +170,5 @@ uint8* DRI::load_mda(uint32 crc32, int page, int* size) *size = buffer_size; return buffer; -#endif } diff --git a/src/sys/mako_midi.cpp b/src/sys/mako_midi.cpp index 0ce8ddb..d99f17e 100644 --- a/src/sys/mako_midi.cpp +++ b/src/sys/mako_midi.cpp @@ -281,9 +281,7 @@ std::vector MAKOMidi::generate_smf(int current_max) w.send_3bytes(0xb0 + play[i].channel, 0x0a, play[i].pan); } else if(d0 == 0xec) { -#ifdef _SYSTEM1 if (nact->crc32 != CRC32_DPS) -#endif mute_flag = true; } else if(d0 == 0xf5) { diff --git a/src/sys/nact.cpp b/src/sys/nact.cpp index b017b48..104fc67 100644 --- a/src/sys/nact.cpp +++ b/src/sys/nact.cpp @@ -16,18 +16,12 @@ extern SDL_Window* g_window; // 初期化 -NACT::NACT(const char* game_id, const char* font_file, const char* playlist) +NACT::NACT(int sys_ver, uint32 crc32, const char* font_file, const char* playlist) + : sys_ver(sys_ver), crc32(crc32) { - mouse_x = mouse_y = 0; - // デバッグコンソール起動 initialize_console(); - // SYSTEM3 初期化 - - crc32 = calc_crc32(game_id); - fatal_error = post_quit = false; - // AG00.DAT読み込み FILEIO* fio = new FILEIO(); if(fio->Fopen("AG00.DAT", FILEIO_READ_BINARY)) { @@ -91,26 +85,26 @@ NACT::NACT(const char* game_id, const char* font_file, const char* playlist) pcm_index = 0; memset(pcm, 0, sizeof(pcm)); -#ifdef _SYSTEM1 - // SYETEM1 初期化 - menu_max = 6; - switch (crc32) { - case CRC32_DPS: - text_refresh = false; - strcpy_s(tvar[0], 22, "カスタム"); - strcpy_s(tvar[1], 22, "リーナス"); - strcpy_s(tvar[2], 22, "かつみ"); - strcpy_s(tvar[3], 22, "由美子"); - strcpy_s(tvar[4], 22, "いつみ"); - strcpy_s(tvar[5], 22, "ひとみ"); - strcpy_s(tvar[6], 22, "真理子"); - break; - case CRC32_INTRUDER: - menu_max = 11; - paint_x = paint_y = map_page = 0; - break; + if (sys_ver == 1) { + // SYETEM1 初期化 + menu_max = 6; + switch (crc32) { + case CRC32_DPS: + text_refresh = false; + strcpy_s(tvar[0], 22, "カスタム"); + strcpy_s(tvar[1], 22, "リーナス"); + strcpy_s(tvar[2], 22, "かつみ"); + strcpy_s(tvar[3], 22, "由美子"); + strcpy_s(tvar[4], 22, "いつみ"); + strcpy_s(tvar[5], 22, "ひとみ"); + strcpy_s(tvar[6], 22, "真理子"); + break; + case CRC32_INTRUDER: + menu_max = 11; + paint_x = paint_y = map_page = 0; + break; + } } -#endif // 各種クラス生成 ags = new AGS(this, font_file); @@ -177,11 +171,9 @@ void NACT::execute() return; } -#if defined(_SYSTEM1) - if(scenario_page == 0 && scenario_addr == 2) { + if(sys_ver == 1 && scenario_page == 0 && scenario_addr == 2) { opening(); } -#endif // 1コマンド実行 uint8 cmd = getd(); @@ -313,11 +305,9 @@ void NACT::execute() string[0] = cmd; string[1] = '\0'; ags->draw_text(string); -#if defined(_SYSTEM1) if(crc32 == CRC32_DPS && !ags->draw_menu) { text_refresh = false; } -#endif if(!ags->draw_menu && text_wait_enb && cmd != 0x20) { Uint32 dwTime = SDL_GetTicks() + text_wait_time; @@ -346,11 +336,9 @@ void NACT::execute() string[1] = getd(); string[2] = '\0'; ags->draw_text(string); -#if defined(_SYSTEM1) if(crc32 == CRC32_DPS && !ags->draw_menu) { text_refresh = false; } -#endif if(!ags->draw_menu && text_wait_enb) { Uint32 dwTime = SDL_GetTicks() + text_wait_time; @@ -439,3 +427,16 @@ void NACT::fatal(const char* format, ...) { SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, "system3", buf, g_window); fatal_error = true; } + +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); + switch (sys_ver) { + case 1: + return new NACT_Sys1(crc32, font_file, playlist); + case 2: + return new NACT_Sys2(crc32, font_file, playlist); + default: + return new NACT_Sys3(crc32, font_file, playlist); + } +} diff --git a/src/sys/nact.h b/src/sys/nact.h index 432cfbf..235267d 100644 --- a/src/sys/nact.h +++ b/src/sys/nact.h @@ -82,17 +82,21 @@ class MAKO; 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); + virtual ~NACT(); + protected: AGS* ags; MAKO* mako; -private: // コマンドパーサ void execute(); void load_scenario(int page); - bool fatal_error; - bool post_quit; + bool fatal_error = false; + bool post_quit = false; // ADISK.DAT, ASLEEP.DAT char adisk[16]; @@ -118,52 +122,50 @@ private: // int tvar_index; // コマンド - void cmd_calc(); + virtual void cmd_calc() = 0; - void cmd_branch(); - void cmd_label_jump(); - void cmd_label_call(); - void cmd_page_jump(); - void cmd_page_call(); + virtual void cmd_branch() = 0; + virtual void cmd_label_jump() = 0; + virtual void cmd_label_call() = 0; + virtual void cmd_page_jump() = 0; + virtual void cmd_page_call() = 0; - void cmd_set_menu(); - void cmd_open_menu(); - int menu_select(int num_items); + virtual void cmd_set_menu() = 0; + virtual void cmd_open_menu() = 0; - void cmd_set_verbobj(); - void cmd_set_verbobj2(); - void cmd_open_verb(); - void cmd_open_obj(int verb); + virtual void cmd_set_verbobj() = 0; + virtual void cmd_set_verbobj2() = 0; + virtual void cmd_open_verb() = 0; + virtual void cmd_open_obj(int verb) = 0; - void cmd_a(); - void cmd_b(); - void cmd_d(); - void cmd_e(); - void cmd_f(); - void cmd_g(); - void cmd_h(); - void cmd_i(); - void cmd_j(); - void cmd_k(); - void cmd_l(); - void cmd_m(); - void cmd_n(); - void cmd_o(); - void cmd_p(); - void cmd_q(); - void cmd_r(); - void cmd_s(); - void cmd_t(); - void cmd_u(); - void cmd_v(); - void cmd_w(); - void cmd_x(); - void cmd_y(); - void cmd_z(); - -#if defined(_SYSTEM1) - void opening(); + virtual void cmd_a() = 0; + virtual void cmd_b() = 0; + virtual void cmd_d() = 0; + virtual void cmd_e() = 0; + virtual void cmd_f() = 0; + virtual void cmd_g() = 0; + virtual void cmd_h() = 0; + virtual void cmd_i() = 0; + virtual void cmd_j() = 0; + virtual void cmd_k() = 0; + virtual void cmd_l() = 0; + virtual void cmd_m() = 0; + virtual void cmd_n() = 0; + virtual void cmd_o() = 0; + virtual void cmd_p() = 0; + virtual void cmd_q() = 0; + virtual void cmd_r() = 0; + virtual void cmd_s() = 0; + virtual void cmd_t() = 0; + virtual void cmd_u() = 0; + virtual void cmd_v() = 0; + virtual void cmd_w() = 0; + virtual void cmd_x() = 0; + virtual void cmd_y() = 0; + virtual void cmd_z() = 0; + // SYSTEM1 ---- + virtual void opening() {} int menu_max; // メニューの改ページ // DPS @@ -173,7 +175,7 @@ private: int paint_x; int paint_y; int map_page; -#endif + // ------------ bool column; // 座標モード bool wait_keydown; // ウェイト時のキー受付 @@ -200,10 +202,10 @@ private: int pcm[MAX_PCM]; // 下位関数 - uint16 cali(); - uint16 cali2(); - uint8 getd(); - uint16 getw(); + virtual uint16 cali() = 0; + virtual uint16 cali2() = 0; + virtual uint8 getd() = 0; + virtual uint16 getw() = 0; uint16 random(uint16 range); uint32 seed; @@ -216,9 +218,9 @@ private: int joy_num; JOYCAPS joycaps; #endif - int mouse_x, mouse_y; + int mouse_x = 0, mouse_y = 0; - uint32 calc_crc32(const char* game_id); + static uint32 calc_crc32(const char* game_id); // Y27 ダイアログ void text_dialog(); @@ -231,9 +233,6 @@ private: void release_console(); public: - NACT(const char* game_id, const char* font_file, const char* playlist); - ~NACT(); - void mainloop(); int get_screen_height(); @@ -242,10 +241,12 @@ public: void select_sound(int dev); const char* get_game_id(); + static const int get_sys_ver(uint32 crc32); const char* get_title(); bool text_skip_enb; // メッセージスキップ bool text_wait_enb; // テキスト表示のウェイト有効/無効 + int sys_ver; uint32 crc32; // for Y27 @@ -260,5 +261,145 @@ public: void fatal(const char* msg, ...); }; -#endif +class NACT_Sys1 : public NACT { +public: + NACT_Sys1(uint32 crc32, const char* font_file, const char* playlist); + void cmd_calc() override; + void cmd_branch() override; + void cmd_label_jump() override; + void cmd_label_call() override; + void cmd_page_jump() override; + void cmd_page_call() override; + void cmd_set_menu() override; + void cmd_open_menu() override; + void cmd_set_verbobj() override; + void cmd_set_verbobj2() override; + void cmd_open_verb() override; + void cmd_open_obj(int verb) override; + void cmd_a() override; + void cmd_b() override; + void cmd_d() override; + void cmd_e() override; + void cmd_f() override; + void cmd_g() override; + void cmd_h() override; + void cmd_i() override; + void cmd_j() override; + void cmd_k() override; + void cmd_l() override; + void cmd_m() override; + void cmd_n() override; + void cmd_o() override; + void cmd_p() override; + void cmd_q() override; + void cmd_r() override; + void cmd_s() override; + void cmd_t() override; + void cmd_u() override; + void cmd_v() override; + void cmd_w() override; + void cmd_x() override; + void cmd_y() override; + void cmd_z() override; + void opening() override; + uint16 cali() override; + uint16 cali2() override; + uint8 getd() override; + uint16 getw() override; +}; +class NACT_Sys2 : public NACT { +public: + NACT_Sys2(uint32 crc32, const char* font_file, const char* playlist); + void cmd_calc() override; + void cmd_branch() override; + void cmd_label_jump() override; + void cmd_label_call() override; + void cmd_page_jump() override; + void cmd_page_call() override; + void cmd_set_menu() override; + void cmd_open_menu() override; + void cmd_set_verbobj() override; + void cmd_set_verbobj2() override; + void cmd_open_verb() override; + void cmd_open_obj(int verb) override; + void cmd_a() override; + void cmd_b() override; + void cmd_d() override; + void cmd_e() override; + void cmd_f() override; + void cmd_g() override; + void cmd_h() override; + void cmd_i() override; + void cmd_j() override; + void cmd_k() override; + void cmd_l() override; + void cmd_m() override; + void cmd_n() override; + void cmd_o() override; + void cmd_p() override; + void cmd_q() override; + void cmd_r() override; + void cmd_s() override; + void cmd_t() override; + void cmd_u() override; + void cmd_v() override; + void cmd_w() override; + void cmd_x() override; + void cmd_y() override; + void cmd_z() override; + uint16 cali() override; + uint16 cali2() override; + uint8 getd() override; + uint16 getw() override; +}; + +class NACT_Sys3 : public NACT { +public: + NACT_Sys3(uint32 crc32, const char* font_file, const char* playlist); + void cmd_calc() override; + void cmd_branch() override; + void cmd_label_jump() override; + void cmd_label_call() override; + void cmd_page_jump() override; + void cmd_page_call() override; + void cmd_set_menu() override; + void cmd_open_menu() override; + void cmd_set_verbobj() override; + void cmd_set_verbobj2() override; + void cmd_open_verb() override; + void cmd_open_obj(int verb) override; + void cmd_a() override; + void cmd_b() override; + void cmd_d() override; + void cmd_e() override; + void cmd_f() override; + void cmd_g() override; + void cmd_h() override; + void cmd_i() override; + void cmd_j() override; + void cmd_k() override; + void cmd_l() override; + void cmd_m() override; + void cmd_n() override; + void cmd_o() override; + void cmd_p() override; + void cmd_q() override; + void cmd_r() override; + void cmd_s() override; + void cmd_t() override; + void cmd_u() override; + void cmd_v() override; + void cmd_w() override; + void cmd_x() override; + void cmd_y() override; + void cmd_z() override; + uint16 cali() override; + uint16 cali2() override; + uint8 getd() override; + uint16 getw() override; +private: + int menu_select(int num_items); +}; + +#endif // _NACT_H_ diff --git a/src/sys/nact_crc32.cpp b/src/sys/nact_crc32.cpp index 58c3f50..c745889 100644 --- a/src/sys/nact_crc32.cpp +++ b/src/sys/nact_crc32.cpp @@ -12,48 +12,57 @@ namespace { const struct CRCTable { const char* id; + int sys_ver; uint32 crc32; const char* title; } crc_table[] = { -#if defined(_SYSTEM1) - {"crescent", CRC32_CRESCENT, "繧ッ繝ャ繧サ繝ウ繝医Β繝シ繝ウ縺後=繧�"}, - {"dps", CRC32_DPS, "D.P.S - Dream Program System"}, - {"fukei", CRC32_FUKEI, "蟀ヲ隴ヲ縺輔s�シカ�シク"}, - {"intruder", CRC32_INTRUDER, "Intruder -譯懷ア区聞縺ョ謗「邏「-"}, - {"tengu", CRC32_TENGU, "縺ゅ�カ縺ェ縺�縺ヲ繧薙$莨晁ェャ"}, - {"little_vampire", CRC32_VAMPIRE, "Little Vampire"}, -#elif defined(_SYSTEM2) - {"ayumi_proto", CRC32_AYUMI_PROTO, "縺ゅf縺ソ縺。繧�繧鍋黄隱� PROTO"}, - {"sdps_maria", CRC32_SDPS_MARIA, "Super D.P.S"}, - {"sdps_tono", CRC32_SDPS_TONO, "Super D.P.S"}, - {"sdps_kaizoku", CRC32_SDPS_KAIZOKU, "Super D.P.S"}, - {"prog_fd", CRC32_PROSTUDENTG_FD, "prostudent G"}, -#else // System3 - {"ambivalenz_fd", CRC32_AMBIVALENZ_FD, "AmbivalenZ 竏剃コ悟セ玖レ蜿坂��"}, - {"ambivalenz_cd", CRC32_AMBIVALENZ_CD, "AmbivalenZ 竏剃コ悟セ玖レ蜿坂��"}, - {"dps_all", CRC32_DPSALL, "D.P.S. 蜈ィ驛ィ"}, - {"funnybee_cd", CRC32_FUNNYBEE_CD, "螳�螳吝ソォ逶励ヵ繧。繝九�シBee"}, -// {"funnybee_patch", CRC32_FUNNYBEE_PATCH, "螳�螳吝ソォ逶励ヵ繧。繝九�シBee"}, - {"funnybee_fd", CRC32_FUNNYBEE_FD, "螳�螳吝ソォ逶励ヵ繧。繝九�シBee"}, - {"onlyyou", CRC32_ONLYYOU, "Only You 竏剃ク也エ�譛ォ縺ョ繧ク繝・繝ェ繧ィ繝�繝磯#竏�"}, - {"onlyyou_demo", CRC32_ONLYYOU_DEMO, "Only You 竏剃ク也エ�譛ォ縺ョ繧ク繝・繝ェ繧ィ繝�繝磯#竏� 繝�繝「迚�"}, - {"prog_cd", CRC32_PROSTUDENTG_CD, "prostudent G"}, - {"rance41", CRC32_RANCE41, "繝ゥ繝ウ繧ケ 4.1 縲懊♀阮ャ蟾・蝣エ繧呈舞縺茨シ√��"}, - {"rance42", CRC32_RANCE42, "繝ゥ繝ウ繧ケ 4.2 縲懊お繝ウ繧ク繧ァ繝ォ邨�縲�"}, - {"ayumi_cd", CRC32_AYUMI_CD, "縺ゅf縺ソ縺。繧�繧鍋黄隱�"}, - {"ayumi_live_256", CRC32_AYUMI_JISSHA_256, "縺ゅf縺ソ縺。繧�繧鍋黄隱� 螳溷�咏沿"}, - {"ayumi_live_full", CRC32_AYUMI_JISSHA_FULL, "縺ゅf縺ソ縺。繧�繧鍋黄隱� 繝輔Ν繧ォ繝ゥ繝シ螳溷�咏沿"}, - {"yakata3_cd", CRC32_YAKATA3_CD, "繧「繝ェ繧ケ縺ョ鬢ィ3"}, - {"yakata3_fd", CRC32_YAKATA3_FD, "繧「繝ェ繧ケ縺ョ鬢ィ3"}, - {"hashirionna2", CRC32_HASHIRIONNA2, "襍ー繧雁・ウ2"}, - {"toushin2_sp", CRC32_TOUSHIN2_SP, "髣倡・樣�ス蟶�2 縺昴@縺ヲ縲√◎繧後°繧俄�ヲ"}, - {"otome", CRC32_OTOMESENKI, "荵吝・ウ謌ヲ險�"}, - {"ningyo", CRC32_NINGYO, "莠コ鬲� -陂ソ蟄�-"}, - {"mugen", CRC32_MUGENHOUYOU, "螟「蟷サ豕。蠖ア"}, -#endif - {NULL, 0, NULL}, + {"crescent", 1, CRC32_CRESCENT, "繧ッ繝ャ繧サ繝ウ繝医Β繝シ繝ウ縺後=繧�"}, + {"dps", 1, CRC32_DPS, "D.P.S - Dream Program System"}, + {"fukei", 1, CRC32_FUKEI, "蟀ヲ隴ヲ縺輔s�シカ�シク"}, + {"intruder", 1, CRC32_INTRUDER, "Intruder -譯懷ア区聞縺ョ謗「邏「-"}, + {"tengu", 1, CRC32_TENGU, "縺ゅ�カ縺ェ縺�縺ヲ繧薙$莨晁ェャ"}, + {"little_vampire", 1, CRC32_VAMPIRE, "Little Vampire"}, + + {"ayumi_proto", 2, CRC32_AYUMI_PROTO, "縺ゅf縺ソ縺。繧�繧鍋黄隱� 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"}, + + {"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"}, + {"rance41", 3, CRC32_RANCE41, "繝ゥ繝ウ繧ケ 4.1 縲懊♀阮ャ蟾・蝣エ繧呈舞縺茨シ√��"}, + {"rance42", 3, CRC32_RANCE42, "繝ゥ繝ウ繧ケ 4.2 縲懊お繝ウ繧ク繧ァ繝ォ邨�縲�"}, + {"ayumi_cd", 3, CRC32_AYUMI_CD, "縺ゅf縺ソ縺。繧�繧鍋黄隱�"}, + {"ayumi_live_256", 3, CRC32_AYUMI_JISSHA_256, "縺ゅf縺ソ縺。繧�繧鍋黄隱� 螳溷�咏沿"}, + {"ayumi_live_full", 3, CRC32_AYUMI_JISSHA_FULL, "縺ゅf縺ソ縺。繧�繧鍋黄隱� 繝輔Ν繧ォ繝ゥ繝シ螳溷�咏沿"}, + {"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, "螟「蟷サ豕。蠖ア"}, + + {NULL, 0, 0, NULL}, }; +const CRCTable* lookup(uint32 crc32) +{ + for (const CRCTable* t = crc_table; t->id; t++) { + if (crc32 == t->crc32) + return t; + } + return NULL; +} + } // namespace uint32 NACT::calc_crc32(const char* game_id) @@ -89,7 +98,6 @@ uint32 NACT::calc_crc32(const char* game_id) } fio->Fclose(); } -#if defined(_SYSTEM2) if(crc == CRC32_SDPS) { // Super D.P.S縺ョ蝣エ蜷医�ッBDISK.DAT縺ョCRC繧貞叙繧� if(fio->Fopen("BDISK.DAT", FILEIO_READ_BINARY)) { @@ -116,7 +124,6 @@ uint32 NACT::calc_crc32(const char* game_id) fio->Fclose(); } } -#endif delete fio; #if 0 printf("CRC: %x\n", crc); @@ -126,18 +133,21 @@ uint32 NACT::calc_crc32(const char* game_id) const char* NACT::get_game_id() { - for (const CRCTable* t = crc_table; t->id; t++) { - if (crc32 == t->crc32) - return t->id; - } + if (const CRCTable* entry = lookup(crc32)) + return entry->id; return NULL; } +const int NACT::get_sys_ver(uint32 crc32) +{ + if (const CRCTable* entry = lookup(crc32)) + return entry->sys_ver; + return 3; +} + const char* NACT::get_title() { - for (const CRCTable* t = crc_table; t->id; t++) { - if (crc32 == t->crc32) - return t->title; - } + if (const CRCTable* entry = lookup(crc32)) + return entry->title; return NULL; } diff --git a/src/sys/nact_sys1.cpp b/src/sys/nact_sys1.cpp index e20ba53..23cec25 100644 --- a/src/sys/nact_sys1.cpp +++ b/src/sys/nact_sys1.cpp @@ -60,7 +60,12 @@ } \ } -void NACT::opening() +NACT_Sys1::NACT_Sys1(uint32 crc32, const char* font_file, const char* playlist) + : NACT(1, crc32, font_file, playlist) +{ +} + +void NACT_Sys1::opening() { switch (crc32) { case CRC32_CRESCENT: @@ -85,7 +90,7 @@ void NACT::opening() } } -void NACT::cmd_calc() +void NACT_Sys1::cmd_calc() { int index = getd(); if(0x80 <= index && index <= 0xbf) { @@ -102,7 +107,7 @@ void NACT::cmd_calc() #endif } -void NACT::cmd_branch() +void NACT_Sys1::cmd_branch() { int condition = cali(); int nest = 0; @@ -204,7 +209,7 @@ void NACT::cmd_branch() #endif } -void NACT::cmd_label_jump() +void NACT_Sys1::cmd_label_jump() { int next_addr = getw(); scenario_addr = next_addr; @@ -216,7 +221,7 @@ void NACT::cmd_label_jump() #endif } -void NACT::cmd_label_call() +void NACT_Sys1::cmd_label_call() { int next_addr = getw(); @@ -239,7 +244,7 @@ void NACT::cmd_label_call() } } -void NACT::cmd_page_jump() +void NACT_Sys1::cmd_page_jump() { int next_page = cali(); load_scenario(next_page); @@ -253,7 +258,7 @@ void NACT::cmd_page_jump() #endif } -void NACT::cmd_page_call() +void NACT_Sys1::cmd_page_call() { int next_page = cali(), next_addr; @@ -281,7 +286,7 @@ void NACT::cmd_page_call() scenario_addr = next_addr; } -void NACT::cmd_set_menu() +void NACT_Sys1::cmd_set_menu() { if(ags->draw_menu) { ags->menu_dest_x = 2; @@ -311,7 +316,7 @@ void NACT::cmd_set_menu() } } -void NACT::cmd_open_menu() +void NACT_Sys1::cmd_open_menu() { #if defined(_DEBUG_CONSOLE) char log[128]; @@ -422,7 +427,7 @@ void NACT::cmd_open_menu() menu_index = 0; } -void NACT::cmd_set_verbobj() +void NACT_Sys1::cmd_set_verbobj() { int verb = getd(); int obj = getd(); @@ -440,7 +445,7 @@ void NACT::cmd_set_verbobj() #endif } -void NACT::cmd_set_verbobj2() +void NACT_Sys1::cmd_set_verbobj2() { int condition = cali(); int verb = getd(); @@ -461,7 +466,7 @@ void NACT::cmd_set_verbobj2() #endif } -void NACT::cmd_open_verb() +void NACT_Sys1::cmd_open_verb() { // 動詞メニューの表示 #if defined(_DEBUG_CONSOLE) @@ -630,7 +635,7 @@ top2: menu_index = 0; } -void NACT::cmd_open_obj(int verb) +void NACT_Sys1::cmd_open_obj(int verb) { // 目的語メニューの表示 verb_obj = false; @@ -817,7 +822,7 @@ top2: } } -void NACT::cmd_a() +void NACT_Sys1::cmd_a() { #if defined(_DEBUG_CONSOLE) char log[128]; @@ -860,22 +865,22 @@ void NACT::cmd_a() text_refresh = true; } -void NACT::cmd_b() +void NACT_Sys1::cmd_b() { // 未使用 } -void NACT::cmd_d() +void NACT_Sys1::cmd_d() { // 未使用 } -void NACT::cmd_e() +void NACT_Sys1::cmd_e() { // 未使用 } -void NACT::cmd_f() +void NACT_Sys1::cmd_f() { #if defined(_DEBUG_CONSOLE) char log[128]; @@ -886,7 +891,7 @@ void NACT::cmd_f() scenario_addr = 2; } -void NACT::cmd_g() +void NACT_Sys1::cmd_g() { int page = getd(); @@ -912,27 +917,27 @@ void NACT::cmd_g() } } -void NACT::cmd_h() +void NACT_Sys1::cmd_h() { // 未使用 } -void NACT::cmd_i() +void NACT_Sys1::cmd_i() { // 未使用 } -void NACT::cmd_j() +void NACT_Sys1::cmd_j() { // 未使用 } -void NACT::cmd_k() +void NACT_Sys1::cmd_k() { // 未使用 } -void NACT::cmd_l() +void NACT_Sys1::cmd_l() { int index = getd(); @@ -1038,22 +1043,22 @@ void NACT::cmd_l() } } -void NACT::cmd_m() +void NACT_Sys1::cmd_m() { // 未使用 } -void NACT::cmd_n() +void NACT_Sys1::cmd_n() { // 未使用 } -void NACT::cmd_o() +void NACT_Sys1::cmd_o() { // 未使用 } -void NACT::cmd_p() +void NACT_Sys1::cmd_p() { int param = getd(); @@ -1076,7 +1081,7 @@ void NACT::cmd_p() buffer[p++] = (tmp >> 8) & 0xff; \ } -void NACT::cmd_q() +void NACT_Sys1::cmd_q() { static char header[112] = { 'T', 'h', 'i', 's', ' ', 'i', 's', ' ', 's', 'a', 'v', 'e', ' ', 'd', 'a', 't', @@ -1169,7 +1174,7 @@ void NACT::cmd_q() } } -void NACT::cmd_r() +void NACT_Sys1::cmd_r() { #if defined(_DEBUG_CONSOLE) char log[128]; @@ -1183,7 +1188,7 @@ void NACT::cmd_r() } } -void NACT::cmd_s() +void NACT_Sys1::cmd_s() { int page = getd(); @@ -1200,12 +1205,12 @@ void NACT::cmd_s() } } -void NACT::cmd_t() +void NACT_Sys1::cmd_t() { // 未使用 } -void NACT::cmd_u() +void NACT_Sys1::cmd_u() { int page = getd(); int transparent = getd(); @@ -1227,17 +1232,17 @@ void NACT::cmd_u() } } -void NACT::cmd_v() +void NACT_Sys1::cmd_v() { // 未使用 } -void NACT::cmd_w() +void NACT_Sys1::cmd_w() { // 未使用 } -void NACT::cmd_x() +void NACT_Sys1::cmd_x() { int index = getd(); @@ -1252,7 +1257,7 @@ void NACT::cmd_x() } } -void NACT::cmd_y() +void NACT_Sys1::cmd_y() { int cmd = cali(); int param = cali(); @@ -1417,7 +1422,7 @@ void NACT::cmd_y() } } -void NACT::cmd_z() +void NACT_Sys1::cmd_z() { if (crc32 == CRC32_CRESCENT) { cmd_y(); @@ -1495,7 +1500,7 @@ void NACT::cmd_z() // 下位関数 -uint16 NACT::cali() +uint16 NACT_Sys1::cali() { uint32 cali[256]; int p = 1; @@ -1557,7 +1562,7 @@ uint16 NACT::cali() return (uint16)(cali[1] & 0xffff); } -uint16 NACT::cali2() +uint16 NACT_Sys1::cali2() { uint16 val = 0; uint16 dat = getd(); @@ -1575,12 +1580,12 @@ uint16 NACT::cali2() return val; } -uint8 NACT::getd() +uint8 NACT_Sys1::getd() { return scenario_data[scenario_addr++]; } -uint16 NACT::getw() +uint16 NACT_Sys1::getw() { uint16 val = scenario_data[scenario_addr] | (scenario_data[scenario_addr + 1] << 8); scenario_addr += 2; diff --git a/src/sys/nact_sys2.cpp b/src/sys/nact_sys2.cpp index af2dc65..c538021 100644 --- a/src/sys/nact_sys2.cpp +++ b/src/sys/nact_sys2.cpp @@ -55,7 +55,12 @@ } \ } -void NACT::cmd_calc() +NACT_Sys2::NACT_Sys2(uint32 crc32, const char* font_file, const char* playlist) + : NACT(2, crc32, font_file, playlist) +{ +} + +void NACT_Sys2::cmd_calc() { int index = getd(); if(0x80 <= index && index <= 0xbf) { @@ -72,7 +77,7 @@ void NACT::cmd_calc() #endif } -void NACT::cmd_branch() +void NACT_Sys2::cmd_branch() { int condition = cali(); int nest = 0; @@ -238,7 +243,7 @@ void NACT::cmd_branch() #endif } -void NACT::cmd_label_jump() +void NACT_Sys2::cmd_label_jump() { int next_addr = getw(); scenario_addr = next_addr; @@ -250,7 +255,7 @@ void NACT::cmd_label_jump() #endif } -void NACT::cmd_label_call() +void NACT_Sys2::cmd_label_call() { int next_addr = getw(); @@ -273,7 +278,7 @@ void NACT::cmd_label_call() } } -void NACT::cmd_page_jump() +void NACT_Sys2::cmd_page_jump() { int next_page = cali(); load_scenario(next_page); @@ -287,7 +292,7 @@ void NACT::cmd_page_jump() #endif } -void NACT::cmd_page_call() +void NACT_Sys2::cmd_page_call() { int next_page = cali(), next_addr; @@ -315,7 +320,7 @@ void NACT::cmd_page_call() scenario_addr = next_addr; } -void NACT::cmd_set_menu() +void NACT_Sys2::cmd_set_menu() { if(ags->draw_menu) { ags->menu_dest_x = 2; @@ -345,7 +350,7 @@ void NACT::cmd_set_menu() } } -void NACT::cmd_open_menu() +void NACT_Sys2::cmd_open_menu() { #if defined(_DEBUG_CONSOLE) char log[128]; @@ -452,7 +457,7 @@ void NACT::cmd_open_menu() menu_index = 0; } -void NACT::cmd_set_verbobj() +void NACT_Sys2::cmd_set_verbobj() { int verb = getd(); int obj = getd(); @@ -470,7 +475,7 @@ void NACT::cmd_set_verbobj() #endif } -void NACT::cmd_set_verbobj2() +void NACT_Sys2::cmd_set_verbobj2() { int condition = cali(); int verb = getd(); @@ -491,7 +496,7 @@ void NACT::cmd_set_verbobj2() #endif } -void NACT::cmd_open_verb() +void NACT_Sys2::cmd_open_verb() { // 動詞メニューの表示 #if defined(_DEBUG_CONSOLE) @@ -623,7 +628,7 @@ void NACT::cmd_open_verb() menu_index = 0; } -void NACT::cmd_open_obj(int verb) +void NACT_Sys2::cmd_open_obj(int verb) { // 目的語メニューの表示 verb_obj = false; @@ -766,7 +771,7 @@ void NACT::cmd_open_obj(int verb) } } -void NACT::cmd_a() +void NACT_Sys2::cmd_a() { #if defined(_DEBUG_CONSOLE) char log[128]; @@ -806,7 +811,7 @@ void NACT::cmd_a() ags->clear_text_window(text_window, true); } -void NACT::cmd_b() +void NACT_Sys2::cmd_b() { int cmd = cali(); int index = cali(); @@ -873,7 +878,7 @@ void NACT::cmd_b() } } -void NACT::cmd_d() +void NACT_Sys2::cmd_d() { int p1 = cali(); int p2 = cali(); @@ -891,7 +896,7 @@ void NACT::cmd_d() #endif } -void NACT::cmd_e() +void NACT_Sys2::cmd_e() { int p1 = cali(); int p2 = cali(); @@ -904,7 +909,7 @@ void NACT::cmd_e() #endif } -void NACT::cmd_f() +void NACT_Sys2::cmd_f() { #if defined(_DEBUG_CONSOLE) char log[128]; @@ -915,7 +920,7 @@ void NACT::cmd_f() scenario_addr = 2; } -void NACT::cmd_g() +void NACT_Sys2::cmd_g() { int page = cali(); @@ -933,7 +938,7 @@ void NACT::cmd_g() ags->load_cg(page, -1); } -void NACT::cmd_h() +void NACT_Sys2::cmd_h() { int length = getd(); int val = cali(); @@ -978,7 +983,7 @@ void NACT::cmd_h() ags->draw_text(string); } -void NACT::cmd_i() +void NACT_Sys2::cmd_i() { int p1 = cali(); int p2 = cali(); @@ -991,7 +996,7 @@ void NACT::cmd_i() #endif } -void NACT::cmd_j() +void NACT_Sys2::cmd_j() { int p1 = cali(); int p2 = cali(); @@ -1003,13 +1008,13 @@ void NACT::cmd_j() #endif } -void NACT::cmd_k() +void NACT_Sys2::cmd_k() { // 未使用 cmd_r(); } -void NACT::cmd_l() +void NACT_Sys2::cmd_l() { int index = getd(); @@ -1115,7 +1120,7 @@ void NACT::cmd_l() } } -void NACT::cmd_m() +void NACT_Sys2::cmd_m() { char string[22]; int d, p = 0; @@ -1142,7 +1147,7 @@ void NACT::cmd_m() } } -void NACT::cmd_n() +void NACT_Sys2::cmd_n() { int p1 = cali(); int p2 = cali(); @@ -1154,7 +1159,7 @@ void NACT::cmd_n() #endif } -void NACT::cmd_o() +void NACT_Sys2::cmd_o() { int st = cali(); int width = cali(); @@ -1172,7 +1177,7 @@ void NACT::cmd_o() ags->draw_mesh(sx, sy, width, height); } -void NACT::cmd_p() +void NACT_Sys2::cmd_p() { int param = getd(); @@ -1195,7 +1200,7 @@ void NACT::cmd_p() buffer[p++] = (tmp >> 8) & 0xff; \ } -void NACT::cmd_q() +void NACT_Sys2::cmd_q() { static char header[112] = { 'T', 'h', 'i', 's', ' ', 'i', 's', ' ', 's', 'a', 'v', 'e', ' ', 'd', 'a', 't', @@ -1288,7 +1293,7 @@ void NACT::cmd_q() } } -void NACT::cmd_r() +void NACT_Sys2::cmd_r() { #if defined(_DEBUG_CONSOLE) char log[128]; @@ -1302,7 +1307,7 @@ void NACT::cmd_r() } } -void NACT::cmd_s() +void NACT_Sys2::cmd_s() { int page = getd(); @@ -1319,7 +1324,7 @@ void NACT::cmd_s() } } -void NACT::cmd_t() +void NACT_Sys2::cmd_t() { int p1 = cali(); int p2 = cali(); @@ -1332,7 +1337,7 @@ void NACT::cmd_t() #endif } -void NACT::cmd_u() +void NACT_Sys2::cmd_u() { int page = getd(); int transparent = getd(); @@ -1346,7 +1351,7 @@ void NACT::cmd_u() ags->load_cg(page, transparent); } -void NACT::cmd_v() +void NACT_Sys2::cmd_v() { int p1 = cali(); int p2 = cali(); @@ -1358,7 +1363,7 @@ void NACT::cmd_v() #endif } -void NACT::cmd_w() +void NACT_Sys2::cmd_w() { int p1 = cali(); int p2 = cali(); @@ -1372,7 +1377,7 @@ void NACT::cmd_w() #endif } -void NACT::cmd_x() +void NACT_Sys2::cmd_x() { int index = getd(); @@ -1387,7 +1392,7 @@ void NACT::cmd_x() } } -void NACT::cmd_y() +void NACT_Sys2::cmd_y() { int cmd = cali(); int param = cali(); @@ -1550,7 +1555,7 @@ void NACT::cmd_y() // Y255 } -void NACT::cmd_z() +void NACT_Sys2::cmd_z() { int cmd = cali(); int param = cali(); @@ -1571,7 +1576,7 @@ void NACT::cmd_z() // 下位関数 -uint16 NACT::cali() +uint16 NACT_Sys2::cali() { uint32 cali[256]; int p = 1; @@ -1639,7 +1644,7 @@ uint16 NACT::cali() return (uint16)(cali[1] & 0xffff); } -uint16 NACT::cali2() +uint16 NACT_Sys2::cali2() { uint16 val = 0; uint16 dat = getd(); @@ -1657,12 +1662,12 @@ uint16 NACT::cali2() return val; } -uint8 NACT::getd() +uint8 NACT_Sys2::getd() { return scenario_data[scenario_addr++]; } -uint16 NACT::getw() +uint16 NACT_Sys2::getw() { uint16 val = scenario_data[scenario_addr] | (scenario_data[scenario_addr + 1] << 8); scenario_addr += 2; diff --git a/src/sys/nact_sys3.cpp b/src/sys/nact_sys3.cpp index 86ed242..d2ae8d1 100644 --- a/src/sys/nact_sys3.cpp +++ b/src/sys/nact_sys3.cpp @@ -13,7 +13,12 @@ #include "../fileio.h" #include "texthook.h" -void NACT::cmd_calc() +NACT_Sys3::NACT_Sys3(uint32 crc32, const char* font_file, const char* playlist) + : NACT(3, crc32, font_file, playlist) +{ +} + +void NACT_Sys3::cmd_calc() { int index = getd(); if(0x80 <= index && index <= 0xbf) { @@ -30,7 +35,7 @@ void NACT::cmd_calc() #endif } -void NACT::cmd_branch() +void NACT_Sys3::cmd_branch() { int condition = cali(); int t_addr = scenario_addr + 2; @@ -46,7 +51,7 @@ void NACT::cmd_branch() #endif } -void NACT::cmd_label_jump() +void NACT_Sys3::cmd_label_jump() { int next_addr = getw(); scenario_addr = next_addr; @@ -58,7 +63,7 @@ void NACT::cmd_label_jump() #endif } -void NACT::cmd_label_call() +void NACT_Sys3::cmd_label_call() { int next_addr = getw(); @@ -81,7 +86,7 @@ void NACT::cmd_label_call() } } -void NACT::cmd_page_jump() +void NACT_Sys3::cmd_page_jump() { int next_page = cali(); load_scenario(next_page); @@ -95,7 +100,7 @@ void NACT::cmd_page_jump() #endif } -void NACT::cmd_page_call() +void NACT_Sys3::cmd_page_call() { int next_page = cali(), next_addr; @@ -123,7 +128,7 @@ void NACT::cmd_page_call() scenario_addr = next_addr; } -void NACT::cmd_set_menu() +void NACT_Sys3::cmd_set_menu() { if(ags->draw_menu) { ags->menu_dest_x = 2; @@ -153,7 +158,7 @@ void NACT::cmd_set_menu() } } -int NACT::menu_select(int num_items) +int NACT_Sys3::menu_select(int num_items) { // クリック中の間は待機 for(;;) { @@ -253,7 +258,7 @@ int NACT::menu_select(int num_items) return current_index; } -void NACT::cmd_open_menu() +void NACT_Sys3::cmd_open_menu() { #if defined(_DEBUG_CONSOLE) char log[128]; @@ -276,7 +281,7 @@ void NACT::cmd_open_menu() menu_index = 0; } -void NACT::cmd_set_verbobj() +void NACT_Sys3::cmd_set_verbobj() { int verb = getd(); int obj = getd(); @@ -294,7 +299,7 @@ void NACT::cmd_set_verbobj() #endif } -void NACT::cmd_set_verbobj2() +void NACT_Sys3::cmd_set_verbobj2() { int condition = cali(); int verb = getd(); @@ -315,7 +320,7 @@ void NACT::cmd_set_verbobj2() #endif } -void NACT::cmd_open_verb() +void NACT_Sys3::cmd_open_verb() { // 動詞メニューの表示 #if defined(_DEBUG_CONSOLE) @@ -363,7 +368,7 @@ void NACT::cmd_open_verb() menu_index = 0; } -void NACT::cmd_open_obj(int verb) +void NACT_Sys3::cmd_open_obj(int verb) { // 目的語メニューの表示 verb_obj = false; @@ -422,7 +427,7 @@ void NACT::cmd_open_obj(int verb) } } -void NACT::cmd_a() +void NACT_Sys3::cmd_a() { texthook_nextpage(); @@ -464,7 +469,7 @@ void NACT::cmd_a() ags->clear_text_window(text_window, true); } -void NACT::cmd_b() +void NACT_Sys3::cmd_b() { int cmd = getd(); int index = cali(); @@ -537,12 +542,12 @@ void NACT::cmd_b() } } -void NACT::cmd_d() +void NACT_Sys3::cmd_d() { // 未使用 } -void NACT::cmd_e() +void NACT_Sys3::cmd_e() { int index = cali(); uint8 color = (uint8)cali(); @@ -564,7 +569,7 @@ void NACT::cmd_e() ags->box[index - 1].ey = ey; } -void NACT::cmd_f() +void NACT_Sys3::cmd_f() { #if defined(_DEBUG_CONSOLE) char log[128]; @@ -575,7 +580,7 @@ void NACT::cmd_f() scenario_addr = 2; } -void NACT::cmd_g() +void NACT_Sys3::cmd_g() { int page = cali(); @@ -588,7 +593,7 @@ void NACT::cmd_g() ags->load_cg(page, -1); } -void NACT::cmd_h() +void NACT_Sys3::cmd_h() { int length = getd(); int val = cali(); @@ -639,7 +644,7 @@ void NACT::cmd_h() ags->draw_text(string); } -void NACT::cmd_i() +void NACT_Sys3::cmd_i() { int sx = cali(); int sy = cali(); @@ -661,7 +666,7 @@ void NACT::cmd_i() ags->copy(sx, sy, ex, ey, dx, dy); } -void NACT::cmd_j() +void NACT_Sys3::cmd_j() { int x = cali(); int y = cali(); @@ -678,7 +683,7 @@ void NACT::cmd_j() ags->set_cg_dest = true; } -void NACT::cmd_k() +void NACT_Sys3::cmd_k() { int cmd = getd(), val; @@ -755,7 +760,7 @@ void NACT::cmd_k() } } -void NACT::cmd_l() +void NACT_Sys3::cmd_l() { int index = cali(); @@ -889,7 +894,7 @@ void NACT::cmd_l() } } -void NACT::cmd_m() +void NACT_Sys3::cmd_m() { char string[22]; int d, p = 0; @@ -924,7 +929,7 @@ void NACT::cmd_m() } } -void NACT::cmd_n() +void NACT_Sys3::cmd_n() { int cmd = getd(); int src = cali(); @@ -937,7 +942,7 @@ void NACT::cmd_n() #endif } -void NACT::cmd_o() +void NACT_Sys3::cmd_o() { int cmd = cali(); if(cmd == 0) { @@ -993,7 +998,7 @@ void NACT::cmd_o() } } -void NACT::cmd_p() +void NACT_Sys3::cmd_p() { int index =cali(); int r = cali(); @@ -1020,7 +1025,7 @@ void NACT::cmd_p() buffer[p++] = (tmp >> 8) & 0xff; \ } -void NACT::cmd_q() +void NACT_Sys3::cmd_q() { static char header[112] = { #if 0 @@ -1140,7 +1145,7 @@ void NACT::cmd_q() } } -void NACT::cmd_r() +void NACT_Sys3::cmd_r() { texthook_newline(); @@ -1156,7 +1161,7 @@ void NACT::cmd_r() } } -void NACT::cmd_s() +void NACT_Sys3::cmd_s() { int page = getd(); @@ -1173,7 +1178,7 @@ void NACT::cmd_s() } } -void NACT::cmd_t() +void NACT_Sys3::cmd_t() { int x = cali(); int y = cali(); @@ -1189,7 +1194,7 @@ void NACT::cmd_t() ags->text_dest_y = y; } -void NACT::cmd_u() +void NACT_Sys3::cmd_u() { int page = cali(); int transparent = cali(); @@ -1206,7 +1211,7 @@ void NACT::cmd_u() ags->load_cg(page, transparent); } -void NACT::cmd_v() +void NACT_Sys3::cmd_v() { int cmd = cali(); int index = cali(); @@ -1234,7 +1239,7 @@ void NACT::cmd_v() } } -void NACT::cmd_w() +void NACT_Sys3::cmd_w() { int x = cali(); int y = cali(); @@ -1249,7 +1254,7 @@ void NACT::cmd_w() ags->paint(x, y, color); } -void NACT::cmd_x() +void NACT_Sys3::cmd_x() { int index = getd(); @@ -1264,7 +1269,7 @@ void NACT::cmd_x() } } -void NACT::cmd_y() +void NACT_Sys3::cmd_y() { int cmd = cali(); int param = cali(); @@ -1650,7 +1655,7 @@ void NACT::cmd_y() } } -void NACT::cmd_z() +void NACT_Sys3::cmd_z() { int cmd = cali(); int param = cali(); @@ -1685,7 +1690,7 @@ void NACT::cmd_z() // 下位関数 -uint16 NACT::cali() +uint16 NACT_Sys3::cali() { uint32 cali[256]; int p = 1; @@ -1753,7 +1758,7 @@ uint16 NACT::cali() return (uint16)(cali[1] & 0xffff); } -uint16 NACT::cali2() +uint16 NACT_Sys3::cali2() { uint16 val = 0; uint16 dat = getd(); @@ -1771,12 +1776,12 @@ uint16 NACT::cali2() return val; } -uint8 NACT::getd() +uint8 NACT_Sys3::getd() { return scenario_data[scenario_addr++]; } -uint16 NACT::getw() +uint16 NACT_Sys3::getw() { uint16 val = scenario_data[scenario_addr] | (scenario_data[scenario_addr + 1] << 8); scenario_addr += 2; diff --git a/src/win/nact_win.cpp b/src/win/nact_win.cpp index 35e5f39..185488d 100644 --- a/src/win/nact_win.cpp +++ b/src/win/nact_win.cpp @@ -2,13 +2,7 @@ #include #include #include "SDL_syswm.h" -#if defined(_SYSTEM1) -#include "../res1/resource.h" -#elif defined(_SYSTEM2) -#include "../res2/resource.h" -#else #include "../res3/resource.h" -#endif extern SDL_Window* g_window; @@ -84,13 +78,9 @@ void NACT::initialize_console() #if defined(_DEBUG_CONSOLE) AllocConsole(); freopen("CONOUT$", "w", stdout); -#if defined(_SYSTEM1) - SetConsoleTitle("SYSTEM1 NACT Tracer"); -#elif defined(_SYSTEM2) - SetConsoleTitle("SYSTEM2 NACT Tracer"); -#else - SetConsoleTitle("SYSTEM3 NACT Tracer"); -#endif + char title[] = "SYSTEM1 NACT Tracer"; + title[6] = '0' + sys_ver; + SetConsoleTitle(title); #endif }