From bc9989ccbc9a2e609c44eae2d264f7b26308b5cd Mon Sep 17 00:00:00 2001 From: kichikuou Date: Sun, 6 Dec 2020 21:35:11 +0900 Subject: [PATCH] Pull system3 for win32 2020-03-21 --- build8.bat | 21 - build9.bat | 24 ++ crescent.vcproj | 656 ----------------------------- fukei.vcproj | 656 ----------------------------- history.txt | 34 +- intruder.vcproj | 656 ----------------------------- maria.vcproj | 636 ---------------------------- prog_omake.vcproj | 32 +- readme.txt | 12 +- src/common.h | 2 +- src/fileio.cpp | 56 ++- src/fileio.h | 12 +- src/res1/AMUS_AB.MDA | Bin 0 -> 2816 bytes src/res1/AMUS_AL1.MDA | Bin 0 -> 2560 bytes src/res1/AMUS_AT.MDA | Bin 0 -> 3072 bytes src/res1/AMUS_CRS.MDA | Bin 0 -> 5376 bytes src/res1/AMUS_DPS.MDA | Bin 0 -> 2048 bytes src/res1/AMUS_INT.MDA | Bin 0 -> 3328 bytes src/res1/AMUS_LP2.MDA | Bin 0 -> 2816 bytes src/res1/AMUS_SG.MDA | Bin 0 -> 1280 bytes src/res1/AMUS_T1.MDA | Bin 0 -> 3840 bytes src/res1/AMUS_VX.MDA | Bin 0 -> 1280 bytes src/res1/BMUS_AKA.MDA | Bin 0 -> 1536 bytes src/res1/BMUS_ANT.MDA | Bin 0 -> 1792 bytes src/res1/BMUS_FAH.MDA | Bin 0 -> 1536 bytes src/res1/BMUS_KAT.MDA | Bin 0 -> 1536 bytes src/res1/BMUS_NAI.MDA | Bin 0 -> 1792 bytes src/res1/BMUS_NOB.MDA | Bin 0 -> 1536 bytes src/res1/BMUS_RAB.MDA | Bin 0 -> 2304 bytes src/res1/BMUS_SIN.MDA | Bin 0 -> 2048 bytes src/res1/BMUS_SOT.MDA | Bin 0 -> 2304 bytes src/res1/CMUS_T1.MDA | Bin 0 -> 3584 bytes src/res1/Script1.rc | 26 ++ src/res1/resource.h | 22 +- src/res2/AMUS_AL2.MDA | Bin 0 -> 46592 bytes src/res2/AMUS_AYM.MDA | Bin 0 -> 2816 bytes src/res2/AMUS_DLK.MDA | Bin 0 -> 6144 bytes src/res2/AMUS_DRS.MDA | Bin 0 -> 4864 bytes src/res2/AMUS_PSG.MDA | Bin 0 -> 6144 bytes src/res2/AMUS_R3H.MDA | Bin 0 -> 10496 bytes src/res2/AMUS_R4.MDA | Bin 0 -> 11776 bytes src/res2/AMUS_SDP.MDA | Bin 0 -> 1280 bytes src/res2/BMUS_KAM.MDA | Bin 0 -> 1536 bytes src/res2/BMUS_MTK.MDA | Bin 0 -> 1536 bytes src/res2/BMUS_TNM.MDA | Bin 0 -> 1536 bytes src/res2/Script1.rc | 16 + src/res2/resource.h | 12 +- src/res3/AMUS_T2.MDA | Bin 0 -> 39680 bytes src/res3/Script1.rc | 25 +- src/res3/resource.h | 27 +- src/rest2/AMUS_AL3.MDA | Bin 49152 -> 0 bytes src/rest2/AMUS_KNG.MDA | Bin 0 -> 8192 bytes src/rest2/Script1.rc | 4 +- src/rest2/resource.h | 6 +- src/sys/ags.cpp | 114 ++--- src/sys/ags.h | 37 +- src/sys/ags_bmp.cpp | 5 +- src/sys/ags_draw.cpp | 79 ++-- src/sys/ags_gl3.cpp | 4 +- src/sys/ags_gm3.cpp | 6 +- src/sys/ags_pms.cpp | 19 +- src/sys/ags_text.cpp | 4 +- src/sys/ags_vsp.cpp | 20 +- src/sys/ags_vsp2l.cpp | 6 +- src/sys/ags_window.cpp | 14 +- src/sys/crc32.h | 41 +- src/sys/dri.cpp | 225 ++++++++-- src/sys/dri.h | 4 +- src/sys/mako.cpp | 28 +- src/sys/mako.h | 12 +- src/sys/mako_midi.cpp | 40 +- src/sys/nact.cpp | 172 +++++--- src/sys/nact.h | 32 +- src/sys/nact_crc32.cpp | 191 +++++---- src/sys/nact_dialog.cpp | 67 --- src/sys/nact_input.cpp | 2 +- src/sys/nact_sys1.cpp | 759 +++++++++++++++------------------- src/sys/nact_sys2.cpp | 531 +++++++++++------------- src/sys/nact_sys3.cpp | 417 ++++++------------- src/winmain.cpp | 23 +- dps.vcproj => system1.vcproj | 115 +++++- sdps.vcproj => system2.vcproj | 85 +++- system3.vcproj | 5 + tengu.vcproj | 656 ----------------------------- vampire.vcproj | 656 ----------------------------- vista.manifest | 24 ++ 86 files changed, 1814 insertions(+), 5514 deletions(-) delete mode 100644 build8.bat create mode 100644 build9.bat delete mode 100644 crescent.vcproj delete mode 100644 fukei.vcproj delete mode 100644 intruder.vcproj delete mode 100644 maria.vcproj create mode 100644 src/res1/AMUS_AB.MDA create mode 100644 src/res1/AMUS_AL1.MDA create mode 100644 src/res1/AMUS_AT.MDA create mode 100644 src/res1/AMUS_CRS.MDA create mode 100644 src/res1/AMUS_DPS.MDA create mode 100644 src/res1/AMUS_INT.MDA create mode 100644 src/res1/AMUS_LP2.MDA create mode 100644 src/res1/AMUS_SG.MDA create mode 100644 src/res1/AMUS_T1.MDA create mode 100644 src/res1/AMUS_VX.MDA create mode 100644 src/res1/BMUS_AKA.MDA create mode 100644 src/res1/BMUS_ANT.MDA create mode 100644 src/res1/BMUS_FAH.MDA create mode 100644 src/res1/BMUS_KAT.MDA create mode 100644 src/res1/BMUS_NAI.MDA create mode 100644 src/res1/BMUS_NOB.MDA create mode 100644 src/res1/BMUS_RAB.MDA create mode 100644 src/res1/BMUS_SIN.MDA create mode 100644 src/res1/BMUS_SOT.MDA create mode 100644 src/res1/CMUS_T1.MDA create mode 100644 src/res2/AMUS_AL2.MDA create mode 100644 src/res2/AMUS_AYM.MDA create mode 100644 src/res2/AMUS_DLK.MDA create mode 100644 src/res2/AMUS_DRS.MDA create mode 100644 src/res2/AMUS_PSG.MDA create mode 100644 src/res2/AMUS_R3H.MDA create mode 100644 src/res2/AMUS_R4.MDA create mode 100644 src/res2/AMUS_SDP.MDA create mode 100644 src/res2/BMUS_KAM.MDA create mode 100644 src/res2/BMUS_MTK.MDA create mode 100644 src/res2/BMUS_TNM.MDA create mode 100644 src/res3/AMUS_T2.MDA delete mode 100644 src/rest2/AMUS_AL3.MDA create mode 100644 src/rest2/AMUS_KNG.MDA delete mode 100644 src/sys/nact_dialog.cpp rename dps.vcproj => system1.vcproj (81%) rename sdps.vcproj => system2.vcproj (83%) delete mode 100644 tengu.vcproj delete mode 100644 vampire.vcproj create mode 100644 vista.manifest diff --git a/build8.bat b/build8.bat deleted file mode 100644 index 4ba473e..0000000 --- a/build8.bat +++ /dev/null @@ -1,21 +0,0 @@ -echo off -if exist "%ProgramFiles(x86)%" goto is_x64 -set path="%ProgramFiles%\Microsoft Visual Studio 9.0\Common7\IDE";%PATH% -goto start -:is_x64 -set path="%ProgramFiles(x86)%\Microsoft Visual Studio 9.0\Common7\IDE";%PATH% -:start - -devenv.com crescent.vcproj /Rebuild Release -devenv.com dps.vcproj /Rebuild Release -devenv.com fukei.vcproj /Rebuild Release -devenv.com intruder.vcproj /Rebuild Release -devenv.com maria.vcproj /Rebuild Release -devenv.com prog_omake.vcproj /Rebuild Release -devenv.com sdps.vcproj /Rebuild Release -devenv.com system3.vcproj /Rebuild Release -devenv.com tengu.vcproj /Rebuild Release -devenv.com vampire.vcproj /Rebuild Release - -pause -echo on diff --git a/build9.bat b/build9.bat new file mode 100644 index 0000000..4dc4700 --- /dev/null +++ b/build9.bat @@ -0,0 +1,24 @@ +echo off + +if exist "%ProgramFiles(x86)%" goto is_x64 +set path="%ProgramFiles%\Microsoft Visual Studio 9.0\Common7\IDE";%PATH% +set path="%ProgramFiles%\Windows Kits\8.1\bin\x86";%PATH% +goto start + +:is_x64 +set path="%ProgramFiles(x86)%\Microsoft Visual Studio 9.0\Common7\IDE";%PATH% +set path="%ProgramFiles(x86)%\Windows Kits\8.1\bin\x86";%PATH% + +:start + +devenv.com system1.vcproj /Rebuild Release +devenv.com system2.vcproj /Rebuild Release +devenv.com system3.vcproj /Rebuild Release +devenv.com prog_omake.vcproj /Rebuild Release + +pushd Release +for /r %%i in (*.exe) do mt.exe /manifest ..\vista.manifest -outputresource:%%i;1 +popd + +pause +echo on diff --git a/crescent.vcproj b/crescent.vcproj deleted file mode 100644 index 87e8ff7..0000000 --- a/crescent.vcproj +++ /dev/null @@ -1,656 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/fukei.vcproj b/fukei.vcproj deleted file mode 100644 index be5145b..0000000 --- a/fukei.vcproj +++ /dev/null @@ -1,656 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/history.txt b/history.txt index 0cc83e4..9c76af9 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/intruder.vcproj b/intruder.vcproj deleted file mode 100644 index 357c44c..0000000 --- a/intruder.vcproj +++ /dev/null @@ -1,656 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/maria.vcproj b/maria.vcproj deleted file mode 100644 index 4768fc3..0000000 --- a/maria.vcproj +++ /dev/null @@ -1,636 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/prog_omake.vcproj b/prog_omake.vcproj index 006d92d..593493e 100644 --- a/prog_omake.vcproj +++ b/prog_omake.vcproj @@ -4,6 +4,7 @@ Version="9.00" Name="prog_omake" ProjectGUID="{2F98D020-2D77-4650-84C7-589A44DAC686}" + RootNamespace="prog_omake" TargetFrameworkVersion="0" > @@ -48,7 +49,7 @@ + + + + + + + + @@ -661,6 +685,10 @@ RelativePath="src\res3\AMUS_RG2.MDA" > + + diff --git a/readme.txt b/readme.txt index 8ca3ece..f973658 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版や、 diff --git a/src/common.h b/src/common.h index dc52a6a..af637a3 100644 --- a/src/common.h +++ b/src/common.h @@ -13,7 +13,7 @@ #pragma comment(lib, "Gdiplus.lib") using namespace Gdiplus; -#ifdef _DEBUG +#if defined(_DEBUG) // detect memory leaks #define _CRTDBG_MAP_ALLOC #include diff --git a/src/fileio.cpp b/src/fileio.cpp index cb61930..eda61f1 100644 --- a/src/fileio.cpp +++ b/src/fileio.cpp @@ -20,7 +20,34 @@ FILEIO::~FILEIO(void) } } -bool FILEIO::Fopen(_TCHAR *filename, int mode) +const char *FILEIO::GetRootPath() +{ + static bool initialized = false; + static char root_path[_MAX_PATH]; + + // モジュールパス取得 + if(!initialized) { + char tmp_path[_MAX_PATH], *ptr = NULL; + + if(GetModuleFileNameA(NULL, tmp_path, _MAX_PATH) != 0 && GetFullPathNameA(tmp_path, _MAX_PATH, root_path, &ptr) != 0 && ptr != NULL) { + *ptr = '\0'; + } else { + strcpy_s(root_path, _MAX_PATH, ".\\"); + } + initialized = true; + } + return root_path; +} + +const char *FILEIO::GetFilePath(const char *file_name) +{ + static char file_path[_MAX_PATH]; + + sprintf_s(file_path, _MAX_PATH, "%s%s", GetRootPath(), file_name); + return file_path; +} + +bool FILEIO::Fopen(const char *file_name, int mode) { if(fp != NULL) { Fclose(); @@ -28,17 +55,17 @@ bool FILEIO::Fopen(_TCHAR *filename, int mode) fp = NULL; if(mode == FILEIO_READ_BINARY) { - _tfopen_s(&fp, filename, _T("rb")); + fopen_s(&fp, GetFilePath(file_name), "rb"); } else if(mode == FILEIO_WRITE_BINARY) { - _tfopen_s(&fp, filename, _T("wb")); + fopen_s(&fp, GetFilePath(file_name), "wb"); } else if(mode == FILEIO_READ_WRITE_BINARY) { - _tfopen_s(&fp, filename, _T("r+b")); + fopen_s(&fp, GetFilePath(file_name), "r+b"); } else if(mode == FILEIO_READ_ASCII) { - _tfopen_s(&fp, filename, __T("r")); + fopen_s(&fp, GetFilePath(file_name), "r"); } else if(mode == FILEIO_WRITE_ASCII) { - _tfopen_s(&fp, filename, _T("w")); + fopen_s(&fp, GetFilePath(file_name), "w"); } else if(mode == FILEIO_READ_WRITE_ASCII) { - _tfopen_s(&fp, filename, _T("r+w")); + fopen_s(&fp, GetFilePath(file_name), "r+w"); } return (fp != NULL); } @@ -69,12 +96,12 @@ uint32 FILEIO::Ftell() return ftell(fp); } -uint32 FILEIO::Fread(void* buffer, uint32 size, uint32 count) +uint32 FILEIO::Fread(void *buffer, uint32 size, uint32 count) { return fread(buffer, size, count, fp); } -uint32 FILEIO::Fwrite(void* buffer, uint32 size, uint32 count) +uint32 FILEIO::Fwrite(void *buffer, uint32 size, uint32 count) { return fwrite(buffer, size, count, fp); } @@ -90,19 +117,24 @@ int FILEIO::Fgetw() return val | (Fgetc() << 8); } -void FILEIO::Fgets(char dest[]) +void FILEIO::Fgets(char *dest, int length) { int p = 0; for(;;) { int c = Fgetc(); + if(c == 0x0d || c == EOF) { 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 37d994a..20b5af7 100644 --- a/src/fileio.h +++ b/src/fileio.h @@ -24,20 +24,22 @@ class FILEIO { private: - FILE* fp; + FILE *fp; public: FILEIO(); ~FILEIO(); - bool Fopen(_TCHAR *filename, int mode); + static const char *GetRootPath(); + static const char *GetFilePath(const char *file_name); + bool Fopen(const char *file_name, int mode); void Fclose(); uint32 Fseek(long offset, int origin); uint32 Ftell(); - uint32 Fread(void* buffer, uint32 size, uint32 count); - uint32 Fwrite(void* buffer, uint32 size, uint32 count); + uint32 Fread(void *buffer, uint32 size, uint32 count); + 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/res1/AMUS_AB.MDA b/src/res1/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/res1/AMUS_AT.MDA b/src/res1/AMUS_AT.MDA new file mode 100644 index 0000000000000000000000000000000000000000..546a5a688c3252e8280082fca95ea6d2521830ea GIT binary patch literal 3072 zcmd^=%W4!s6o&u0&2%zJNZbS!q`V-V3`trNOhzMAdjSJ+<4hoAlLkkZ2Hfb*q@O_1 z2M`~?S8$`Cdmq4+Yh5XVms3^UGuCtjS29D+qEB^I(cRzq&tJ_Up-@8|5ymi%1|~3x zDIAqxjBzHIWQx^TokeWy#8E+aoawEt_HNo)yqb!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/res1/AMUS_DPS.MDA b/src/res1/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}(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/res1/AMUS_LP2.MDA b/src/res1/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/res1/AMUS_SG.MDA b/src/res1/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/res1/BMUS_AKA.MDA b/src/res1/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/res1/BMUS_FAH.MDA b/src/res1/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/res1/BMUS_KAT.MDA b/src/res1/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/res1/BMUS_NAI.MDA b/src/res1/BMUS_NAI.MDA new file mode 100644 index 0000000000000000000000000000000000000000..82fb56aca52cc962e15693be79e2cfec4f780092 GIT binary patch literal 1792 zcmd^<&ubGw6vw~wb|$+?`s+|3cxb0q%0_6K{?Y~(IuQ#7Qn99m5`+dCa%>=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/res1/BMUS_NOB.MDA b/src/res1/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/res1/CMUS_T1.MDA b/src/res1/CMUS_T1.MDA new file mode 100644 index 0000000000000000000000000000000000000000..1d33e0ca3f6222343000c94548e52f14b45fd167 GIT binary patch literal 3584 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 literal 0 HcmV?d00001 diff --git a/src/res2/AMUS_DLK.MDA b/src/res2/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/res2/AMUS_DRS.MDA b/src/res2/AMUS_DRS.MDA new file mode 100644 index 0000000000000000000000000000000000000000..c963711dd2821f6387efa3ddd6a0d704ad0f0be6 GIT binary patch literal 4864 zcmds*OHUL*5XY;!XO@9oU;#}C1{nl#d94emfFapl#YEzI;FSf=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/res2/AMUS_PSG.MDA b/src/res2/AMUS_PSG.MDA new file mode 100644 index 0000000000000000000000000000000000000000..aaece6056b45e95cb6db2d6232b49e624911bdc6 GIT binary patch literal 6144 zcmds*%WoT16o=2bcV;}X9mk2C)=AT3QoF^m<40+PQ(B}6YSmVx62dJirBW>v(p@Wc z({3|M#0H7~p&ND}Ay!C81tGER9;t{8Y`P{SJ@@7D%oqeL@T7Nh=5cNLJHPX~W?+F0 z4rIWEDab+&@-Phrn1Le9!W@*K4D)adjza|&U=d!mg@_C}T4M!DdRDTcPDglT*aNkneqEVX}TCN}|HHdH`JfzOQT9SXWoaFzD_!s;p?eS1&J9n4w z%ZgyZX_Xo_oK!W!f_wu?ZD^jMijYE&NdDa)lKe)0;+1ir?Y1xUzb~^L54(z%{h=>7 zc=`$HZh==x8*1Sk7|u+jK`QzZg3Y0pg}*s?}YMRfLsYp5bx zGVMha@cd*_JqoVxB!BO9-{$|J{<*Rdig`g_a256gqMZ`18GvnEUjJ2q@Y)+@jBjLBL&56_IN%RI2H$1(N^aM@fFIzo>Vj z{s})wOZ=)J(AZ}}I&AxUK(P$6Ziu zFJoq;k^YxYW&acWKXsD)oWZ)#o%9~HBK}QDXC~XZp=DItd2u7PYLnoxCH4R2Q{s=+ zf9ii%R4ylMIONH(cQBF&#t{}Qiniy4^*;+BD`KGy$JePY%G9XgViT8IxH7TR5t}3Z z?|qTvH}UUB>p#^to&N(GawWev!XIXYJ|j3`7g%aiA;1aE`7zmtx03(F$05Id<5K)v zl*_j~P}U!oy^-^eI2n^i^r$odI6{%HK-o#szxQRxFHisK{6DXzJE*FeR;f*pCdd&k ziyfptALOd$8^xI=g>i^4ENq%wu zSJ6GR1;Q5n0J4JLqx{dSgAg;v9u9Jk2bMV_+UAVtnE!~lIQ-{otl3C|*ChXI{g7Y# z$F-T7?ul0q_d{!@T{Jrwxa0^LmAJvS3^s?1{I?^Q#^z6~GXCq&lKeFPX>N14SC;%S X6hi; literal 0 HcmV?d00001 diff --git a/src/res2/AMUS_R3H.MDA b/src/res2/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/res2/AMUS_R4.MDA b/src/res2/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/res2/AMUS_SDP.MDA b/src/res2/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/res2/BMUS_KAM.MDA b/src/res2/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/res2/BMUS_MTK.MDA b/src/res2/BMUS_MTK.MDA new file mode 100644 index 0000000000000000000000000000000000000000..aa56d12a1d0a4050d8d910bf8b40dca34eb2dba1 GIT binary patch literal 1536 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 Q9Hziw3LK`u{{ssAFGd?L<^TWy diff --git a/src/rest2/AMUS_KNG.MDA b/src/rest2/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/rest2/Script1.rc b/src/rest2/Script1.rc index 57d769a..28b4b63 100644 --- a/src/rest2/Script1.rc +++ b/src/rest2/Script1.rc @@ -92,8 +92,8 @@ IDI_ICON1 ICON DISCARDABLE "icon1.ico" // MDA // -IDR_AL3 MDA DISCARDABLE "AMUS_AL3.MDA" -IDR_T2 MDA DISCARDABLE "AMUS_T2.MDA" +IDR_AMUS_T2 MDA DISCARDABLE "AMUS_T2.MDA" +IDR_AMUS_KNG MDA DISCARDABLE "AMUS_KNG.MDA" ///////////////////////////////////////////////////////////////////////////// // diff --git a/src/rest2/resource.h b/src/rest2/resource.h index f652de0..7d1b571 100644 --- a/src/rest2/resource.h +++ b/src/rest2/resource.h @@ -7,8 +7,8 @@ #define IDD_DIALOG1 103 #define IDC_TEXT 104 #define IDC_EDITBOX 105 -#define IDR_AL3 106 -#define IDR_T2 107 +#define IDR_AMUS_T2 106 +#define IDR_AMUS_KNG 107 #define ID_RESTART 40001 #define ID_EXIT 40002 #define ID_SCREEN_WINDOW 40003 @@ -22,7 +22,7 @@ // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 118 +#define _APS_NEXT_RESOURCE_VALUE 108 #define _APS_NEXT_COMMAND_VALUE 40009 #define _APS_NEXT_CONTROL_VALUE 1000 #define _APS_NEXT_SYMED_VALUE 101 diff --git a/src/sys/ags.cpp b/src/sys/ags.cpp index 1f25821..c9fc582 100644 --- a/src/sys/ags.cpp +++ b/src/sys/ags.cpp @@ -8,7 +8,6 @@ #include "crc32.h" #include "../fileio.h" -extern _TCHAR g_root[_MAX_PATH]; extern HWND g_hwnd; #define SET_TEXT(n, x1, y1, x2, y2, f) { \ @@ -33,7 +32,7 @@ extern HWND g_hwnd; box[n].ey = y2; \ } -AGS::AGS(NACT* parent) : nact(parent) +AGS::AGS(NACT *parent) : nact(parent) { // GDI+初期化 GdiplusStartup(&gdiToken, &gdiSI, NULL); @@ -55,7 +54,7 @@ AGS::AGS(NACT* parent) : nact(parent) lpDibScreen[i]->bmiHeader.biYPelsPerMeter = 0; lpDibScreen[i]->bmiHeader.biClrUsed = 0; lpDibScreen[i]->bmiHeader.biClrImportant = 0; - hBmpScreen[i] = CreateDIBSection(hdc, lpDibScreen[i], DIB_RGB_COLORS, (PVOID*)&lpBmpScreen[i], NULL, 0); + hBmpScreen[i] = CreateDIBSection(hdc, lpDibScreen[i], DIB_RGB_COLORS, (PVOID *)&lpBmpScreen[i], NULL, 0); hdcDibScreen[i] = CreateCompatibleDC(hdc); SelectObject(hdcDibScreen[i], hBmpScreen[i]); memset(lpBmpScreen[i], 0, 640 * 480 * sizeof(DWORD)); @@ -80,7 +79,7 @@ AGS::AGS(NACT* parent) : nact(parent) lpDibDest->bmiHeader.biYPelsPerMeter = 0; lpDibDest->bmiHeader.biClrUsed = 0; lpDibDest->bmiHeader.biClrImportant = 0; - hBmpDest = CreateDIBSection(hdc, lpDibDest, DIB_RGB_COLORS, (PVOID*)&lpBmpDest, NULL, 0); + hBmpDest = CreateDIBSection(hdc, lpDibDest, DIB_RGB_COLORS, (PVOID *)&lpBmpDest, NULL, 0); hdcDibDest = CreateCompatibleDC(hdc); SelectObject(hdcDibDest, hBmpDest); memset(lpBmpDest, 0, 640 * 480 * sizeof(DWORD)); @@ -99,7 +98,7 @@ AGS::AGS(NACT* parent) : nact(parent) lpDibText->bmiHeader.biYPelsPerMeter = 0; lpDibText->bmiHeader.biClrUsed = 0; lpDibText->bmiHeader.biClrImportant = 0; - hBmpText = CreateDIBSection(hdc, lpDibText, DIB_RGB_COLORS, (PVOID*)&lpBmpText, NULL, 0); + hBmpText = CreateDIBSection(hdc, lpDibText, DIB_RGB_COLORS, (PVOID *)&lpBmpText, NULL, 0); hdcDibText = CreateCompatibleDC(hdc); SelectObject(hdcDibText, hBmpText); // memset(lpBmpText, 0, 64 * 64 * sizeof(DWORD)); @@ -118,7 +117,7 @@ AGS::AGS(NACT* parent) : nact(parent) lpDibMenu->bmiHeader.biYPelsPerMeter = 0; lpDibMenu->bmiHeader.biClrUsed = 0; lpDibMenu->bmiHeader.biClrImportant = 0; - hBmpMenu = CreateDIBSection(hdc, lpDibMenu, DIB_RGB_COLORS, (PVOID*)&lpBmpMenu, NULL, 0); + hBmpMenu = CreateDIBSection(hdc, lpDibMenu, DIB_RGB_COLORS, (PVOID *)&lpBmpMenu, NULL, 0); hdcDibMenu = CreateCompatibleDC(hdc); SelectObject(hdcDibMenu, hBmpMenu); // memset(lpBmpMenu, 0, 64 * 64 * sizeof(DWORD)); @@ -165,11 +164,9 @@ AGS::AGS(NACT* parent) : nact(parent) // GAIJI.DAT読み込み memset(gaiji, 0, sizeof(gaiji)); - FILEIO* fio = new FILEIO(); - _TCHAR file_path[_MAX_PATH]; - _stprintf_s(file_path, _MAX_PATH, _T("%sGAIJI.DAT"), g_root); + FILEIO *fio = new FILEIO(); - if(fio->Fopen(file_path, FILEIO_READ_BINARY)) { + if(fio->Fopen("GAIJI.DAT", FILEIO_READ_BINARY)) { int d1, d2; while((d1 = fio->Fgetc()) != EOF) { d2 = fio->Fgetc(); @@ -199,7 +196,7 @@ AGS::AGS(NACT* parent) : nact(parent) // SYSTEM3 初期化 // ACG.DAT - _tcscpy_s(acg, 16, _T("ACG.DAT")); + strcpy_s(acg, 16, "ACG.DAT"); // パレット memset(program_palette, 0, sizeof(program_palette)); @@ -256,40 +253,59 @@ AGS::AGS(NACT* parent) : nact(parent) // Bコマンド for(int i = 0; i < 10; i++) { // ウィンドウの初期位置はシステムによって異なる -#if defined(_BUNKASAI) - SET_TEXT(i, 24, 304, 616, 384, false); - SET_MENU(i, 440, 18, 620, 178, true); -#elif defined(_CRESCENT) - SET_TEXT(i, 24, 288, 616, 378, false); - // 本来は横メニュー - SET_MENU(i, 464, 50, 623, 240, true); -#elif defined(_DPS) - SET_TEXT(i, 48, 288, 594, 393, false); - //SET_MENU(i, 48, 288, 584, 393, false); - SET_MENU(i, 48, 288, 594, 393, false); -#elif defined(_FUKEI) - SET_TEXT(i, 44, 282, 593, 396, false); - SET_MENU(i, 460, 14, 635, 214, false); -#elif defined(_INTRUDER) - SET_TEXT(i, 8, 280, 629, 393, false); - SET_MENU(i, 448, 136, 623, 340, true); -#elif defined(_TENGU) - SET_TEXT(i, 44, 282, 593, 396, false); - SET_MENU(i, 452, 14, 627, 214, false); -#elif defined(_VAMPIRE) - SET_TEXT(i, 8, 255, 615, 383, false); - SET_MENU(i, 448, 11, 615, 224, false); -#else - SET_TEXT(i, 8, 311, 623, 391, true); - SET_MENU(i, 464, 80, 623, 240, true); +#if defined(_SYSTEM1) + if(nact->crc32_a == CRC32_BUNKASAI) { + SET_TEXT(i, 24, 304, 616, 384, false); + SET_MENU(i, 440, 18, 620, 178, true); + } else if(nact->crc32_a == CRC32_CRESCENT) { + SET_TEXT(i, 24, 288, 616, 378, false); + // 本来は横メニュー + SET_MENU(i, 464, 50, 623, 240, true); + } else if(nact->crc32_a == CRC32_DPS || nact->crc32_a == CRC32_DPS_SG || nact->crc32_a == CRC32_DPS_SG2 || nact->crc32_a == 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); + } else if(nact->crc32_a == CRC32_FUKEI) { + SET_TEXT(i, 44, 282, 593, 396, false); + SET_MENU(i, 460, 14, 635, 214, false); + } else if(nact->crc32_a == CRC32_INTRUDER) { + SET_TEXT(i, 8, 280, 629, 393, false); + SET_MENU(i, 448, 136, 623, 340, true); + } else if(nact->crc32_a == CRC32_TENGU) { + SET_TEXT(i, 44, 282, 593, 396, false); + SET_MENU(i, 452, 14, 627, 214, false); + } else if(nact->crc32_a == CRC32_TOUSHIN_HINT) { + SET_TEXT(i, 8, 311, 623, 391, false); + SET_MENU(i, 452, 14, 627, 214, true); + } else if(nact->crc32_a == CRC32_VAMPIRE) { + SET_TEXT(i, 8, 255, 615, 383, false); + SET_MENU(i, 448, 11, 615, 224, false); + } else if(nact->crc32_a == CRC32_YAKATA) { + SET_TEXT(i, 48, 288, 594, 393, false); + SET_MENU(i, 452, 14, 627, 214, false); + } else +#elif defined(_SYSTEM2) + if(nact->crc32_a == CRC32_DALK_HINT) { + SET_TEXT(i, 24, 308, 376, 386, false); + SET_MENU(i, 404, 28, 604, 244, true); + } else if(nact->crc32_a == CRC32_RANCE3_HINT) { + SET_TEXT(i, 104, 304, 615, 383, false); + SET_MENU(i, 464, 24, 623, 200, true); + } else if(nact->crc32_a == CRC32_YAKATA2) { + SET_TEXT(i, 104, 304, 620, 382, false); + SET_MENU(i, 420, 28, 620, 244, true); + } else #endif + { + SET_TEXT(i, 8, 311, 623, 391, true); + SET_MENU(i, 464, 80, 623, 240, true); + } text_w[i].push = false; text_w[i].screen = NULL; text_w[i].window = NULL; menu_w[i].push = true; menu_w[i].screen = NULL; menu_w[i].window = NULL; - } // Eコマンド @@ -298,9 +314,9 @@ AGS::AGS(NACT* parent) : nact(parent) SET_BOX(i, 0, 0, 0, 639, 399); } #if defined(_SYSTEM2) - 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); @@ -470,7 +486,7 @@ void AGS::fade_out(int depth, bool white) fader = true; for(int y = 0; y < 480; y += 4) { - uint32* dest = &lpBmpDest[640 * (479 - y - fy) + fx]; + uint32 *dest = &lpBmpDest[640 * (479 - y - fy) + fx]; for(int x = 0; x < 640; x += 4) { dest[x] = white ? 0xffffff : 0; } @@ -488,8 +504,8 @@ void AGS::fade_in(int depth) fader = (depth == 15) ? false : true; for(int y = 0; y < 480; y += 4) { - uint32* src = &fader_screen[640 * (479 - y - fy) + fx]; - uint32* dest = &lpBmpDest[640 * (479 - y - fy) + fx]; + uint32 *src = &fader_screen[640 * (479 - y - fy) + fx]; + uint32 *dest = &lpBmpDest[640 * (479 - y - fy) + fx]; for(int x = 0; x < 640; x += 4) { dest[x] = src[x]; } @@ -503,8 +519,8 @@ void AGS::flush_screen(bool update) { if(update) { for(int y = 0; y < screen_height; y++) { - uint32* src = vram[0][y]; - uint32* dest = &lpBmpDest[640 * (479 - y)]; + uint32 *src = vram[0][y]; + uint32 *dest = &lpBmpDest[640 * (479 - y)]; for(int x = 0; x < 640; x++) { #if defined(_SYSTEM3) // あゆみちゃん物語 フルカラー実写版 @@ -523,8 +539,8 @@ void AGS::draw_screen(int sx, int sy, int width, int height) { if(fader) { for(int y = sy; y < (sy + height) && y < 480; y++) { - uint32* src = vram[0][y]; - uint32* dest = &fader_screen[640 * (479 - y)]; + uint32 *src = vram[0][y]; + uint32 *dest = &fader_screen[640 * (479 - y)]; for(int x = sx; x < (sx + width) && x < 640; x++) { uint32 a=src[x]; #if defined(_SYSTEM3) @@ -538,8 +554,8 @@ void AGS::draw_screen(int sx, int sy, int width, int height) } } else { for(int y = sy; y < (sy + height) && y < 480; y++) { - uint32* src = vram[0][y]; - uint32* dest = &lpBmpDest[640 * (479 - y)]; + uint32 *src = vram[0][y]; + uint32 *dest = &lpBmpDest[640 * (479 - y)]; for(int x = sx; x < (sx + width) && x < 640; x++) { uint32 a=src[x]; #if defined(_SYSTEM3) diff --git a/src/sys/ags.h b/src/sys/ags.h index bea8167..7124203 100644 --- a/src/sys/ags.h +++ b/src/sys/ags.h @@ -36,7 +36,7 @@ static inline uint32 SETPALETTE16(uint32 R, uint32 G, uint32 B) class AGS { protected: - NACT* nact; + NACT *nact; private: // GDI+ Gdiplus::GdiplusStartupInput gdiSI; @@ -83,30 +83,29 @@ private: // 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); + void load_gm3(uint8 *data, int page, int transparent); // Intruder -桜屋敷の探索- + void load_vsp2l(uint8 *data, int page, int transparent); // Little Vampire +#endif +#if defined(_SYSTEM1) || defined(_SYSTEM2) + void load_gl3(uint8 *data, int page, int transparent); +#endif +#if defined(_SYSTEM2) || defined(_SYSTEM3) + void load_pms(uint8 *data, int page, int transparent); #endif #if defined(_SYSTEM3) - void load_bmp(const _TCHAR *file_path); + void load_bmp(const char *file_name); // あゆみちゃん物語 フルカラー実写版 #endif + 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_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); void draw_screen(int sx, int sy, int width, int heignt); void invalidate_screen(int sx, int sy, int width, int height); - uint32* vram[3][480]; // 仮想VRAMへのポインタ + uint32 *vram[3][480]; // 仮想VRAMへのポインタ uint32 program_palette[256]; uint32 screen_palette[256]; @@ -116,7 +115,7 @@ private: uint32 fader_screen[640 * 480]; public: - AGS(NACT* parent); + AGS(NACT *parent); ~AGS(); void update_screen(HDC hdc, int sx, int sy, int width, int height); @@ -142,7 +141,9 @@ public: void box_fill(int dest, int sx, int sy, int ex, int ey, uint8 color); void box_line(int dest, int sx, int sy, int ex, int ey, uint8 color); - void draw_text(char string[]); + 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); @@ -159,7 +160,7 @@ public: void select_cursor(); // ACG.DAT - _TCHAR acg[16]; + char acg[16]; // 画面選択 int src_screen; @@ -200,13 +201,13 @@ public: int ey; bool frame; bool push; - uint32* screen; + uint32 *screen; int screen_x; int screen_y; int screen_width; int screen_height; uint32 screen_palette[256]; - uint32* window; + uint32 *window; int window_x; int window_y; int window_width; diff --git a/src/sys/ags_bmp.cpp b/src/sys/ags_bmp.cpp index 748da72..961e86d 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 _TCHAR *file_path) +void AGS::load_bmp(const char *file_name) { // ヘッダ取得 int sx = 0, sy = 0; @@ -21,7 +22,7 @@ void AGS::load_bmp(const _TCHAR *file_path) if(extract_cg) { // 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 bd4aef6..68b3fb9 100644 --- a/src/sys/ags_draw.cpp +++ b/src/sys/ags_draw.cpp @@ -8,60 +8,61 @@ #include "dri.h" #include "crc32.h" -extern _TCHAR 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]; - _stprintf_s(file_path, _MAX_PATH, _T("%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]; - _stprintf_s(file_path, _MAX_PATH, _T("%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; } #endif - DRI* dri = new DRI(); + DRI *dri = new DRI(); int size; - uint8* data = dri->load(acg, page, &size); + uint8 *data = dri->load(acg, page, &size); if(data) { -#if defined(_SYSTEM1) -#if defined(_BUNKASAI) - load_vsp(data, page, transparent); -#elif defined(_INTRUDER) -// load_gm3(data, page, transparent); - load_vsp(data, page, transparent); // 暫定 -#elif defined(_VAMPIRE) - load_vsp2l(data, page, transparent); -#else - load_gl3(data, page, transparent); -#endif -#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 { + #if defined(_SYSTEM1) + if(nact->crc32_a == CRC32_BUNKASAI) { + load_vsp(data, page, transparent); + } else if(nact->crc32_a == CRC32_INTRUDER) { +// load_gm3(data, page, transparent); + load_vsp(data, page, transparent); // 暫定 + } else if(nact->crc32_a == CRC32_VAMPIRE) { + load_vsp2l(data, page, transparent); + } else { + load_gl3(data, page, transparent); + } + #elif defined(_SYSTEM2) + 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); + } else { + if(data[0x8] == 0) { + load_vsp(data, page, transparent); + } else { + load_pms(data, page, transparent); + } + } + #elif defined(_SYSTEM3) if(data[0x8] == 0) { load_vsp(data, page, transparent); } else { load_pms(data, page, transparent); } - } -#else - if(data[0x8] == 0) { - load_vsp(data, page, transparent); - } else { - load_pms(data, page, transparent); - } -#endif + #endif free(data); } delete dri; @@ -77,8 +78,8 @@ void AGS::copy(int sx, int sy, int ex, int ey, int dx, int dy) memcpy(tmp, lpBmpScreen[src_screen], sizeof(tmp)); for(int y = 0; y < height && y + sy < 480 && y + dy < 480; y++) { - uint32* src = &tmp[640 * (479 - (y + sy))]; - uint32* dest = vram[dest_screen][y + dy]; + uint32 *src = &tmp[640 * (479 - (y + sy))]; + uint32 *dest = vram[dest_screen][y + dy]; for(int x = 0; x < width && x + sx < 640 && x + dx < 640; x++) { dest[x + dx] = src[x + sx]; } diff --git a/src/sys/ags_gl3.cpp b/src/sys/ags_gl3.cpp index b3c80eb..90dce5f 100644 --- a/src/sys/ags_gl3.cpp +++ b/src/sys/ags_gl3.cpp @@ -6,7 +6,7 @@ #include "ags.h" -void AGS::load_gl3(uint8* data, int page, int transparent) +void AGS::load_gl3(uint8 *data, int page, int transparent) { // ヘッダ取得 uint16 tmp = (data[0x30] | (data[0x31] << 8)) - 0x8000; @@ -126,7 +126,7 @@ void AGS::load_gl3(uint8* data, int page, int transparent) c[6] = ((b0 >> 1) & 1) | ((b1 ) & 2) | ((b2 << 1) & 4) | ((b3 << 2) & 8); c[7] = ((b0 ) & 1) | ((b1 << 1) & 2) | ((b2 << 2) & 4) | ((b3 << 3) & 8); - uint32* dest = &vram[dest_screen][y + sy][(x + sx) * 8]; + uint32 *dest = &vram[dest_screen][y + sy][(x + sx) * 8]; if(transparent == -1) { for(int i = 0; i < 8; i++) { dest[i] = c[i] | base; diff --git a/src/sys/ags_gm3.cpp b/src/sys/ags_gm3.cpp index 9edfa7d..46a220a 100644 --- a/src/sys/ags_gm3.cpp +++ b/src/sys/ags_gm3.cpp @@ -6,7 +6,7 @@ #include "ags.h" -void AGS::load_gm3(uint8* data, int page, int transparent) +void AGS::load_gm3(uint8 *data, int page, int transparent) { // ヘッダ取得 uint16 tmp = (data[0x30] | (data[0x31] << 8)) - 0x8000; @@ -127,8 +127,8 @@ void AGS::load_gm3(uint8* data, int page, int transparent) c[6] = ((b0 >> 1) & 1) | ((b1 ) & 2) | ((b2 << 1) & 4); c[7] = ((b0 ) & 1) | ((b1 << 1) & 2) | ((b2 << 2) & 4); - uint32* dest0 = &vram[dest_screen][(y + sy) * 2 + 0][(x + sx) * 8]; - uint32* dest1 = &vram[dest_screen][(y + sy) * 2 + 1][(x + sx) * 8]; + uint32 *dest0 = &vram[dest_screen][(y + sy) * 2 + 0][(x + sx) * 8]; + uint32 *dest1 = &vram[dest_screen][(y + sy) * 2 + 1][(x + sx) * 8]; if(transparent == -1) { for(int i = 0; i < 8; i++) { dest0[i] = dest1[i] = c[i] | base; diff --git a/src/sys/ags_pms.cpp b/src/sys/ags_pms.cpp index a8bb1c6..593ef55 100644 --- a/src/sys/ags_pms.cpp +++ b/src/sys/ags_pms.cpp @@ -7,7 +7,7 @@ #include "ags.h" #include "crc32.h" -void AGS::load_pms(uint8* data, int page, int transparent) +void AGS::load_pms(uint8 *data, int page, int transparent) { // ヘッダ取得 int sx = data[0x0] | (data[0x1] << 8); @@ -41,7 +41,7 @@ void AGS::load_pms(uint8* data, int page, int transparent) } } #if defined(_SYSTEM3) - 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++) { @@ -50,7 +50,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++) { @@ -59,8 +59,9 @@ void AGS::load_pms(uint8* data, int page, int transparent) } } } - } else { + } else #endif + { for(int i = 0; i < 16; i++) { for(int j = 0; j < 16; j++) { if(!(mask & (0x01 << i))) { @@ -68,15 +69,13 @@ 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) { + 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++) { @@ -85,7 +84,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++) { @@ -155,7 +154,7 @@ void AGS::load_pms(uint8* data, int page, int transparent) // VRAMに転送 if(extract_cg) { - uint32* dest = &vram[dest_screen][y + sy][sx]; + uint32 *dest = &vram[dest_screen][y + sy][sx]; if(transparent == -1) { for(int x = 0; x < width; x++) { cgdata[2][x] = cgdata[1][x]; diff --git a/src/sys/ags_text.cpp b/src/sys/ags_text.cpp index 33335cf..c3cc1cd 100644 --- a/src/sys/ags_text.cpp +++ b/src/sys/ags_text.cpp @@ -6,7 +6,7 @@ #include "ags.h" -void AGS::draw_text(char string[]) +void AGS::draw_text(const char *string) { // フォントサイズの変更後、一度だけ更新する if(draw_menu) { @@ -105,7 +105,7 @@ void AGS::draw_char(int dest, int dest_x, int dest_y, uint16 code, int size, uin length = 1; } memset(draw_menu ? lpBmpMenu : lpBmpText, 0, 64 * 64 * sizeof(DWORD)); - ExtTextOut(draw_menu ? hdcDibMenu : hdcDibText, 0, 0, NULL, NULL, string, length, NULL); + ExtTextOutA(draw_menu ? hdcDibMenu : hdcDibText, 0, 0, NULL, NULL, string, length, NULL); // パターン出力 for(int y = 0; y < size && y < 64 && dest_y + y < 480; y++) { diff --git a/src/sys/ags_vsp.cpp b/src/sys/ags_vsp.cpp index c58626f..7f6469d 100644 --- a/src/sys/ags_vsp.cpp +++ b/src/sys/ags_vsp.cpp @@ -7,7 +7,7 @@ #include "ags.h" #include "crc32.h" -void AGS::load_vsp(uint8* data, int page, int transparent) +void AGS::load_vsp(uint8 *data, int page, int transparent) { // ヘッダ取得 int sx = data[0] | (data[1] << 8); @@ -29,19 +29,18 @@ 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) { + if(nact->crc32_a == CRC32_AMBIVALENZ_FD || nact->crc32_a == CRC32_AMBIVALENZ_CD) { // Z 0,numを無視する - } else { + } else #endif + { if(palette_bank != -1) { base = (palette_bank & 0x0f) << 4; } -#if defined(_SYSTEM3) } -#endif // パレット取得 - if(get_palette) { + if(get_palette && transparent != 101) { int p = 0x0a; for(int i = 0; i < 16; i++) { uint32 b = data[p++] & 0xf; @@ -53,22 +52,21 @@ 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(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]; } } - } else { + } 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; @@ -148,7 +146,7 @@ void AGS::load_vsp(uint8* data, int page, int transparent) c[6] = ((b0 >> 1) & 1) | ((b1 ) & 2) | ((b2 << 1) & 4) | ((b3 << 2) & 8); c[7] = ((b0 ) & 1) | ((b1 << 1) & 2) | ((b2 << 2) & 4) | ((b3 << 3) & 8); - uint32* dest = &vram[dest_screen][y + sy][(x + sx) * 8]; + uint32 *dest = &vram[dest_screen][y + sy][(x + sx) * 8]; if(transparent == -1) { for(int i = 0; i < 8; i++) { dest[i] = c[i] | base; diff --git a/src/sys/ags_vsp2l.cpp b/src/sys/ags_vsp2l.cpp index 59c1a19..b358863 100644 --- a/src/sys/ags_vsp2l.cpp +++ b/src/sys/ags_vsp2l.cpp @@ -6,7 +6,7 @@ #include "ags.h" -void AGS::load_vsp2l(uint8* data, int page, int transparent) +void AGS::load_vsp2l(uint8 *data, int page, int transparent) { // ヘッダ取得 int sx = data[0] | (data[1] << 8); @@ -118,8 +118,8 @@ void AGS::load_vsp2l(uint8* data, int page, int transparent) c[6] = ((b0 >> 1) & 1) | ((b1 ) & 2) | ((b2 << 1) & 4); c[7] = ((b0 ) & 1) | ((b1 << 1) & 2) | ((b2 << 2) & 4); - uint32* dest0 = &vram[dest_screen][(y + sy) * 2 + 0][(x + sx) * 8]; - uint32* dest1 = &vram[dest_screen][(y + sy) * 2 + 1][(x + sx) * 8]; + uint32 *dest0 = &vram[dest_screen][(y + sy) * 2 + 0][(x + sx) * 8]; + uint32 *dest1 = &vram[dest_screen][(y + sy) * 2 + 1][(x + sx) * 8]; if(transparent == -1) { for(int i = 0; i < 8; i++) { dest0[i] = dest1[i] = c[i] | base; diff --git a/src/sys/ags_window.cpp b/src/sys/ags_window.cpp index 7b96817..eb869d2 100644 --- a/src/sys/ags_window.cpp +++ b/src/sys/ags_window.cpp @@ -87,14 +87,14 @@ void AGS::open_text_window(int index, bool erase) free(text_w[index - 1].screen); } - text_w[index - 1].screen = (uint32*)malloc(width * height * sizeof(uint32)); + text_w[index - 1].screen = (uint32 *)malloc(width * height * sizeof(uint32)); text_w[index - 1].screen_x = sx; text_w[index - 1].screen_y = sy; text_w[index - 1].screen_width = width; text_w[index - 1].screen_height = height; for(int y = 0; y < height && y + sy < 480; y++) { - uint32* scr = fader ? &fader_screen[640 * (479 - y - sy) + sx] : &lpBmpDest[640 * (479 - y - sy) + sx]; + uint32 *scr = fader ? &fader_screen[640 * (479 - y - sy) + sx] : &lpBmpDest[640 * (479 - y - sy) + sx]; for(int x = 0; x < width && x + sx < 640; x++) { uint32 col = vram[0][y + sy][x + sx]; if(!(col & 0x80000000)) { @@ -149,14 +149,14 @@ void AGS::close_text_window(int index, bool update) free(text_w[index - 1].window); } - text_w[index - 1].window = (uint32*)malloc(width * height * sizeof(uint32)); + text_w[index - 1].window = (uint32 *)malloc(width * height * sizeof(uint32)); text_w[index - 1].window_x = sx; text_w[index - 1].window_y = sy; text_w[index - 1].window_width = width; text_w[index - 1].window_height = height; for(int y = 0; y < height && y + sy < 480; y++) { - uint32* scr = fader ? &fader_screen[640 * (479 - y - sy) + sx] : &lpBmpDest[640 * (479 - y - sy) + sx]; + uint32 *scr = fader ? &fader_screen[640 * (479 - y - sy) + sx] : &lpBmpDest[640 * (479 - y - sy) + sx]; for(int x = 0; x < width && x + sx < 640; x++) { uint32 col = vram[0][y + sy][x + sx]; if(!(col & 0x80000000)) { @@ -221,14 +221,14 @@ void AGS::open_menu_window(int index) free(menu_w[index - 1].screen); } - menu_w[index - 1].screen = (uint32*)malloc(wwidth * wheight * sizeof(uint32)); + menu_w[index - 1].screen = (uint32 *)malloc(wwidth * wheight * sizeof(uint32)); menu_w[index - 1].screen_x = wsx; menu_w[index - 1].screen_y = wsy; menu_w[index - 1].screen_width = wwidth; menu_w[index - 1].screen_height = wheight; for(int y = 0; y < wheight && y + wsy < 480; y++) { - uint32* scr = fader ? &fader_screen[640 * (479 - y - wsy) + wsx] : &lpBmpDest[640 * (479 - y - wsy) + wsx]; + uint32 *scr = fader ? &fader_screen[640 * (479 - y - wsy) + wsx] : &lpBmpDest[640 * (479 - y - wsy) + wsx]; for(int x = 0; x < wwidth && x + wsx < 640; x++) { uint32 col = vram[0][y + wsy][x + wsx]; if(!(col & 0x80000000)) { @@ -295,7 +295,7 @@ void AGS::draw_window(int sx, int sy, int ex, int ey, bool frame, uint8 frame_co { // 領域の塗り潰し for(int y = sy; y <= ey && y < 480; y++) { - uint32* dest = vram[0][y]; + uint32 *dest = vram[0][y]; for(int x = sx; x <= ex && x < 640; x++) { dest[x] = back_color; } diff --git a/src/sys/crc32.h b/src/sys/crc32.h index d56ab26..0a7d74f 100644 --- a/src/sys/crc32.h +++ b/src/sys/crc32.h @@ -10,16 +10,44 @@ // ADISK.DATの先頭256bytes #if defined(_SYSTEM1) +#define CRC32_BUNKASAI 0xc80f99b8 // あぶない文化祭前夜 +#define CRC32_CRESCENT 0x42351f2c // クレセントムーンがぁる +#define CRC32_DPS 0x69ea4865 // D.P.S. - Dream Program System +#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_TOUSHIN_HINT 0xac337537 // 闘神都市 ヒントディスク +#define CRC32_VAMPIRE 0x957bcfbf // Little Vampire +#define CRC32_YAKATA 0x8cef6fa6 // ALICEの館 + #elif defined(_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 -#else +#elif defined(_SYSTEM3) #define CRC32_AMBIVALENZ_FD 0xa6b48dfe // AmbivalenZ (FD) #define CRC32_AMBIVALENZ_CD 0x4b10db69 // AmbivalenZ (CD) @@ -38,7 +66,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/dri.cpp b/src/sys/dri.cpp index b94187b..d7048e5 100644 --- a/src/sys/dri.cpp +++ b/src/sys/dri.cpp @@ -15,20 +15,16 @@ #include "../res3/resource.h" #endif -extern _TCHAR g_root[_MAX_PATH]; - -uint8* DRI::load(_TCHAR path[], int page, int* size) +uint8 *DRI::load(const char *file_name, int page, int *size) { - _TCHAR base_path[_MAX_PATH], file_path[_MAX_PATH]; - _tcscpy_s(base_path, _MAX_PATH, path); + char tmp_name[_MAX_PATH]; + strcpy_s(tmp_name, _MAX_PATH, file_name); - FILEIO* fio = new FILEIO(); + FILEIO *fio = new FILEIO(); // ページの位置を取得 - base_path[0] = _T('A'); - _stprintf_s(file_path, _MAX_PATH, _T("%s%s"), g_root, base_path); - - if(!fio->Fopen(file_path, FILEIO_READ_BINARY)) { + tmp_name[0] = 'A'; + if(!fio->Fopen(tmp_name, FILEIO_READ_BINARY)) { delete fio; return NULL; } @@ -58,10 +54,9 @@ uint8* DRI::load(_TCHAR path[], int page, int* size) // A??.DAT以外にリンクされている場合はファイルを開き直す if(disk_index != 1) { - base_path[0] = _T('A') + disk_index - 1; - _stprintf_s(file_path, _MAX_PATH, _T("%s%s"), g_root, base_path); + tmp_name[0] = 'A' + disk_index - 1; fio->Fclose(); - if(!fio->Fopen(file_path, FILEIO_READ_BINARY)) { + if(!fio->Fopen(tmp_name, FILEIO_READ_BINARY)) { delete fio; return NULL; } @@ -74,79 +69,145 @@ uint8* DRI::load(_TCHAR path[], 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(HINSTANCE hInst, uint32 crc32, int page, int* size) +uint8 *DRI::load_mda(HINSTANCE hInst, uint32 crc32_a, uint32 crc32_b, int page, int *size) { -#if defined(_SYSTEM1) - return NULL; -#elif defined(_SYSTEM2) - return NULL; -#else // データ取得 HGLOBAL hGlobal = NULL; - switch(crc32) { +#if defined(_SYSTEM1) + switch(crc32_a) { + case CRC32_BUNKASAI: // あぶない文化祭前夜 + hGlobal = LoadResource(hInst, FindResource(hInst, MAKEINTRESOURCE(IDR_AMUS_AB ), _T("mda"))); + break; + case CRC32_CRESCENT: // クレセントムーンがぁる + hGlobal = LoadResource(hInst, FindResource(hInst, MAKEINTRESOURCE(IDR_AMUS_CRS), _T("mda"))); + break; + case CRC32_DPS: // D.P.S. - Dream Program System + hGlobal = LoadResource(hInst, FindResource(hInst, MAKEINTRESOURCE(IDR_AMUS_DPS), _T("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 + hGlobal = LoadResource(hInst, FindResource(hInst, MAKEINTRESOURCE(IDR_AMUS_SG ), _T("mda"))); + break; + case CRC32_FUKEI: // 婦警さんVX + hGlobal = LoadResource(hInst, FindResource(hInst, MAKEINTRESOURCE(IDR_AMUS_VX ), _T("mda"))); + break; + case CRC32_INTRUDER: // Intruder -桜屋敷の探索- + hGlobal = LoadResource(hInst, FindResource(hInst, MAKEINTRESOURCE(IDR_AMUS_INT), _T("mda"))); + break; + case CRC32_TENGU: // あぶないてんぐ伝説 + hGlobal = LoadResource(hInst, FindResource(hInst, MAKEINTRESOURCE(IDR_AMUS_AT ), _T("mda"))); + break; + case CRC32_TOUSHIN_HINT: // 闘神都市 ヒントディスク + hGlobal = LoadResource(hInst, FindResource(hInst, MAKEINTRESOURCE(IDR_AMUS_T1 ), _T("mda"))); + break; + case CRC32_VAMPIRE: // Little Vampire + hGlobal = LoadResource(hInst, FindResource(hInst, MAKEINTRESOURCE(IDR_AMUS_LP2), _T("mda"))); + break; + case CRC32_YAKATA: // ALICEの館 + hGlobal = LoadResource(hInst, FindResource(hInst, MAKEINTRESOURCE(IDR_AMUS_AL1), _T("mda"))); + break; + } +#elif defined(_SYSTEM2) + switch(crc32_a) { + case CRC32_AYUMI_FD: // あゆみちゃん物語 (FD) + case CRC32_AYUMI_HINT: // あゆみちゃん物語 ヒントディスク + case CRC32_AYUMI_PROTO: // あゆみちゃん物語 PROTO + hGlobal = LoadResource(hInst, FindResource(hInst, MAKEINTRESOURCE(IDR_AMUS_AYM), _T("mda"))); + break; + case CRC32_DALK_HINT: // DALK ヒントディスク + hGlobal = LoadResource(hInst, FindResource(hInst, MAKEINTRESOURCE(IDR_AMUS_DLK), _T("mda"))); + break; + case CRC32_DRSTOP: // Dr. STOP! + hGlobal = LoadResource(hInst, FindResource(hInst, MAKEINTRESOURCE(IDR_AMUS_DRS), _T("mda"))); + break; + case CRC32_PROSTUDENTG_FD: // Prostudent -G- (FD) + hGlobal = LoadResource(hInst, FindResource(hInst, MAKEINTRESOURCE(IDR_AMUS_PSG), _T("mda"))); + break; + case CRC32_RANCE3_HINT: // Rance3 ヒントディスク + hGlobal = LoadResource(hInst, FindResource(hInst, MAKEINTRESOURCE(IDR_AMUS_R3H), _T("mda"))); + break; + case CRC32_SDPS: // Super D.P.S + hGlobal = LoadResource(hInst, FindResource(hInst, MAKEINTRESOURCE(IDR_AMUS_SDP), _T("mda"))); + break; + case CRC32_YAKATA2: // ALICEの館II + hGlobal = LoadResource(hInst, FindResource(hInst, MAKEINTRESOURCE(IDR_AMUS_AL2), _T("mda"))); + break; + } +#elif defined(_SYSTEM3) + switch(crc32_a) { case CRC32_AMBIVALENZ_FD: // AmbivalenZ (FD) case CRC32_AMBIVALENZ_CD: // AmbivalenZ (CD) - hGlobal = LoadResource(hInst, FindResource(hInst, MAKEINTRESOURCE(IDR_AMB), _T("mda"))); + hGlobal = LoadResource(hInst, FindResource(hInst, MAKEINTRESOURCE(IDR_AMUS_AMB), _T("mda"))); break; case CRC32_DPSALL: // DPS全部 - hGlobal = LoadResource(hInst, FindResource(hInst, MAKEINTRESOURCE(IDR_ALL), _T("mda"))); + hGlobal = LoadResource(hInst, FindResource(hInst, MAKEINTRESOURCE(IDR_AMUS_ALL), _T("mda"))); break; case CRC32_FUNNYBEE_CD: // Funny Bee (CD) // case CRC32_FUNNYBEE_PATCH: // Funny Bee (CD + Patch) case CRC32_FUNNYBEE_FD: // Funny Bee (FD) - hGlobal = LoadResource(hInst, FindResource(hInst, MAKEINTRESOURCE(IDR_BEE), _T("mda"))); + hGlobal = LoadResource(hInst, FindResource(hInst, MAKEINTRESOURCE(IDR_AMUS_BEE), _T("mda"))); break; case CRC32_ONLYYOU: // Only You case CRC32_ONLYYOU_DEMO: // Only You (DEMO) - hGlobal = LoadResource(hInst, FindResource(hInst, MAKEINTRESOURCE(IDR_OY), _T("mda"))); + hGlobal = LoadResource(hInst, FindResource(hInst, MAKEINTRESOURCE(IDR_AMUS_OY ), _T("mda"))); break; case CRC32_PROSTUDENTG_CD: // Prostudent -G- (CD) - hGlobal = LoadResource(hInst, FindResource(hInst, MAKEINTRESOURCE(IDR_PSG), _T("mda"))); + hGlobal = LoadResource(hInst, FindResource(hInst, MAKEINTRESOURCE(IDR_AMUS_PSG), _T("mda"))); break; case CRC32_RANCE41: // Rance 4.1 - hGlobal = LoadResource(hInst, FindResource(hInst, MAKEINTRESOURCE(IDR_R41), _T("mda"))); + hGlobal = LoadResource(hInst, FindResource(hInst, MAKEINTRESOURCE(IDR_AMUS_R41), _T("mda"))); break; case CRC32_RANCE42: // Rance 4.2 - hGlobal = LoadResource(hInst, FindResource(hInst, MAKEINTRESOURCE(IDR_R42), _T("mda"))); + hGlobal = LoadResource(hInst, FindResource(hInst, MAKEINTRESOURCE(IDR_AMUS_R42), _T("mda"))); break; case CRC32_AYUMI_CD: // あゆみちゃん物語 (CD) case CRC32_AYUMI_JISSHA_256: // あゆみちゃん物語 実写版 case CRC32_AYUMI_JISSHA_FULL: // あゆみちゃん物語 フルカラー実写版 - hGlobal = LoadResource(hInst, FindResource(hInst, MAKEINTRESOURCE(IDR_AYM), _T("mda"))); + hGlobal = LoadResource(hInst, FindResource(hInst, MAKEINTRESOURCE(IDR_AMUS_AYM), _T("mda"))); break; case CRC32_YAKATA3_CD: // アリスの館3 (CD) case CRC32_YAKATA3_FD: // アリスの館3 (FD) - hGlobal = LoadResource(hInst, FindResource(hInst, MAKEINTRESOURCE(IDR_AL3), _T("mda"))); + hGlobal = LoadResource(hInst, FindResource(hInst, MAKEINTRESOURCE(IDR_AMUS_AL3), _T("mda"))); break; case CRC32_HASHIRIONNA2: // 走り女2 (Rance 4.x ヒントディスク) - hGlobal = LoadResource(hInst, FindResource(hInst, MAKEINTRESOURCE(IDR_RG2), _T("mda"))); + hGlobal = LoadResource(hInst, FindResource(hInst, MAKEINTRESOURCE(IDR_AMUS_RG2), _T("mda"))); + break; + case CRC32_TOUSHIN2_GD: // 闘神都市2 グラフィックディスク + hGlobal = LoadResource(hInst, FindResource(hInst, MAKEINTRESOURCE(IDR_AMUS_T2 ), _T("mda"))); break; case CRC32_OTOMESENKI: // 乙女戦記 - hGlobal = LoadResource(hInst, FindResource(hInst, MAKEINTRESOURCE(IDR_OTM), _T("mda"))); + hGlobal = LoadResource(hInst, FindResource(hInst, MAKEINTRESOURCE(IDR_AMUS_OTM), _T("mda"))); break; case CRC32_MUGENHOUYOU: // 夢幻泡影 - hGlobal = LoadResource(hInst, FindResource(hInst, MAKEINTRESOURCE(IDR_MGN), _T("mda"))); + hGlobal = LoadResource(hInst, FindResource(hInst, MAKEINTRESOURCE(IDR_AMUS_MGN), _T("mda"))); break; } +#endif if(hGlobal == NULL) { return NULL; } - uint8* data = (uint8*)LockResource(hGlobal); + uint8 *data = (uint8 *)LockResource(hGlobal); // ページの位置を取得 int link_sector = data[0] | (data[1] << 8); @@ -165,16 +226,98 @@ uint8* DRI::load_mda(HINSTANCE hInst, uint32 crc32, int page, int* size) return NULL; } + // AMUS.MDA以外にリンクされている場合はリソースを開き直す +#if defined(_SYSTEM1) + if(disk_index == 2) { + switch(crc32_b) { + case CRC32_DPS_SG_FAHREN: // D.P.S. SG - Fahren Fliegen + hGlobal = LoadResource(hInst, FindResource(hInst, MAKEINTRESOURCE(IDR_BMUS_FAH), _T("mda"))); + break; + case CRC32_DPS_SG_KATEI: // D.P.S. SG - 家庭教師はステキなお仕事 + hGlobal = LoadResource(hInst, FindResource(hInst, MAKEINTRESOURCE(IDR_BMUS_KAT), _T("mda"))); + break; + case CRC32_DPS_SG_NOBUNAGA: // D.P.S. SG - 信長の淫謀 + hGlobal = LoadResource(hInst, FindResource(hInst, MAKEINTRESOURCE(IDR_BMUS_NOB), _T("mda"))); + break; + case CRC32_DPS_SG2_ANTIQUE: // D.P.S. SG set2 - ANTIQUE HOUSE + hGlobal = LoadResource(hInst, FindResource(hInst, MAKEINTRESOURCE(IDR_BMUS_ANT), _T("mda"))); + break; + case CRC32_DPS_SG2_IKENAI: // D.P.S. SG set2 - いけない内科検診再び + hGlobal = LoadResource(hInst, FindResource(hInst, MAKEINTRESOURCE(IDR_BMUS_NAI), _T("mda"))); + break; + case CRC32_DPS_SG2_AKAI: // D.P.S. SG set2 - 朱い夜 + hGlobal = LoadResource(hInst, FindResource(hInst, MAKEINTRESOURCE(IDR_BMUS_AKA), _T("mda"))); + break; + case CRC32_DPS_SG3_RABBIT: // D.P.S. SG set3 - Rabbit P4P + hGlobal = LoadResource(hInst, FindResource(hInst, MAKEINTRESOURCE(IDR_BMUS_RAB), _T("mda"))); + break; + case CRC32_DPS_SG3_SHINKON: // D.P.S. SG set3 - しんこんさんものがたり + hGlobal = LoadResource(hInst, FindResource(hInst, MAKEINTRESOURCE(IDR_BMUS_SIN), _T("mda"))); + break; + case CRC32_DPS_SG3_SOTSUGYOU: // D.P.S. SG set3 - 卒業 + hGlobal = LoadResource(hInst, FindResource(hInst, MAKEINTRESOURCE(IDR_BMUS_SOT), _T("mda"))); + break; + default: + hGlobal = NULL; + break; + } + if(hGlobal == NULL) { + return NULL; + } + data = (uint8 *)LockResource(hGlobal); + } else if(disk_index == 3) { + switch(crc32_a) { + case CRC32_TOUSHIN_HINT: // 闘神都市 ヒントディスク + hGlobal = LoadResource(hInst, FindResource(hInst, MAKEINTRESOURCE(IDR_CMUS_T1 ), _T("mda"))); + break; + default: + hGlobal = NULL; + break; + } + if(hGlobal == NULL) { + return NULL; + } + data = (uint8 *)LockResource(hGlobal); + } else +#elif defined(_SYSTEM2) + if(disk_index == 2) { + switch(crc32_b) { + case CRC32_SDPS_MARIA: // Super D.P.S - マリアとカンパン + hGlobal = LoadResource(hInst, FindResource(hInst, MAKEINTRESOURCE(IDR_BMUS_MTK), _T("mda"))); + break; + case CRC32_SDPS_TONO: // Super D.P.S - 遠野の森 + hGlobal = LoadResource(hInst, FindResource(hInst, MAKEINTRESOURCE(IDR_BMUS_TNM), _T("mda"))); + break; + case CRC32_SDPS_KAIZOKU: // Super D.P.S - うれしたのし海賊稼業 + hGlobal = LoadResource(hInst, FindResource(hInst, MAKEINTRESOURCE(IDR_BMUS_KAM), _T("mda"))); + break; + default: + hGlobal = NULL; + break; + } + if(hGlobal == NULL) { + return NULL; + } + data = (uint8 *)LockResource(hGlobal); + } else +#endif + // AMUS.MDA以外にリンクされている場合は失敗 + if(disk_index != 1) { + return NULL; + } + // データ取得 int start_sector = data[link_index * 2 + 0] | (data[link_index * 2 + 1] << 8); int end_sector = data[link_index * 2 + 2] | (data[link_index * 2 + 3] << 8); - int buffer_size = (end_sector - start_sector) * 256; - uint8* buffer = (uint8*)malloc(buffer_size); - memcpy(buffer, &data[(start_sector - 1) * 256], buffer_size); + if((*size = (end_sector - start_sector) * 256) == 0) { + // サイズ不正 + return NULL; + } + + uint8 *buffer = (uint8 *)malloc(*size); + memcpy(buffer, &data[(start_sector - 1) * 256], *size); - *size = buffer_size; return buffer; -#endif } diff --git a/src/sys/dri.h b/src/sys/dri.h index c7dd319..1e0707d 100644 --- a/src/sys/dri.h +++ b/src/sys/dri.h @@ -17,8 +17,8 @@ public: DRI() {} ~DRI() {} - uint8* load(_TCHAR path[], int page, int* size); - uint8* load_mda(HINSTANCE hInst, uint32 crc32, int page, int* size); + uint8 *load(const char *file_name, int page, int *size); + uint8 *load_mda(HINSTANCE hInst, uint32 crc32_a, uint32 crc32_b, int page, int *size); }; #endif diff --git a/src/sys/mako.cpp b/src/sys/mako.cpp index c97e36a..319923c 100644 --- a/src/sys/mako.cpp +++ b/src/sys/mako.cpp @@ -9,11 +9,11 @@ extern HWND g_hwnd; -MAKO::MAKO(NACT* parent) : nact(parent) +MAKO::MAKO(NACT *parent) : nact(parent) { // AMUS.DAT, AMSE.DAT - _tcscpy_s(amus, 16, _T("AMUS.DAT")); - _tcscpy_s(amse, 16, _T("AMSE.DAT")); // 実際には使わない + strcpy_s(amus, 16, "AMUS.DAT"); + strcpy_s(amse, 16, "AMSE.DAT"); // 実際には使わない // 再生状況 current_music = current_mark = current_loop = 0; @@ -147,7 +147,7 @@ bool MAKO::check_music() return current_music ? true : false; } -void MAKO::get_mark(int* mark, int* loop) +void MAKO::get_mark(int *mark, int *loop) { *mark = cdda_play ? 0 : current_mark; *loop = cdda_play ? 0 : current_loop; @@ -184,21 +184,21 @@ void MAKO::play_pcm(int page, bool loop) // 現在再生中のPCMを停止 PlaySound(NULL, NULL, SND_PURGE); - uint8* buffer = NULL; + uint8 *buffer = NULL; int size; - DRI* dri = new DRI(); + DRI *dri = new DRI(); - if((buffer = dri->load(_T("AWAV.DAT"), page, &size)) != NULL) { + if((buffer = dri->load("AWAV.DAT", page, &size)) != NULL) { // WAV形式 (Only You) memcpy(wav, buffer, (size < MAX_SAMPLES) ? size : MAX_SAMPLES); if(loop) { - PlaySound(wav, NULL, SND_ASYNC | SND_MEMORY | SND_LOOP); + PlaySoundA(wav, NULL, SND_ASYNC | SND_MEMORY | SND_LOOP); } else { - PlaySound(wav, NULL, SND_ASYNC | SND_MEMORY); + PlaySoundA(wav, NULL, SND_ASYNC | SND_MEMORY); } free(buffer); - } else if((buffer = dri->load(_T("AMSE.DAT"), page, &size)) != NULL) { + } else if((buffer = dri->load("AMSE.DAT", page, &size)) != NULL) { // AMSE形式 (乙女戦記) int total = (size - 12) * 2 + 0x24; int samples = (size - 12) * 2; @@ -218,9 +218,9 @@ void MAKO::play_pcm(int page, bool loop) } if(loop) { - PlaySound(wav, NULL, SND_ASYNC | SND_MEMORY | SND_LOOP); + PlaySoundA(wav, NULL, SND_ASYNC | SND_MEMORY | SND_LOOP); } else { - PlaySound(wav, NULL, SND_ASYNC | SND_MEMORY); + PlaySoundA(wav, NULL, SND_ASYNC | SND_MEMORY); } free(buffer); } @@ -230,7 +230,7 @@ void MAKO::play_pcm(int page, bool loop) void MAKO::stop_pcm() { #if defined(_USE_PCM) - PlaySound(NULL, NULL, SND_PURGE); + PlaySoundA(NULL, NULL, SND_PURGE); #endif } @@ -243,7 +243,7 @@ bool MAKO::check_pcm() 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x40, 0x1f, 0x00, 0x00, 0x40, 0x1f, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 'd' , 'a' , 't' , 'a' , 0x01, 0x00, 0x00, 0x00, 0x00 }; - return PlaySound(null_wav, NULL, SND_ASYNC | SND_MEMORY | SND_NOSTOP) ? false : true; + return PlaySoundA(null_wav, NULL, SND_ASYNC | SND_MEMORY | SND_NOSTOP) ? false : true; #else return false; #endif diff --git a/src/sys/mako.h b/src/sys/mako.h index ade93ee..074a1bb 100644 --- a/src/sys/mako.h +++ b/src/sys/mako.h @@ -26,7 +26,7 @@ class MAKO { protected: - NACT* nact; + NACT *nact; private: // FM, CD-DA @@ -40,7 +40,7 @@ private: // MIDI再生スレッド typedef struct { - MAKO* mako; + MAKO *mako; int current_music; int next_music; bool request_fill; @@ -103,13 +103,13 @@ private: DWORD prev_time; public: - MAKO(NACT* parent); + MAKO(NACT *parent); ~MAKO(); void play_music(int page); void stop_music(); bool check_music(); - void get_mark(int* mark, int* loop); + void get_mark(int *mark, int *loop); void notify_mci(int status); void play_pcm(int page, bool loop); @@ -126,8 +126,8 @@ public: void load_mda(int page); // AMUS.DAT, AMSE.DAT - _TCHAR amus[16]; - _TCHAR amse[16]; + char amus[16]; + char amse[16]; int current_music; int next_loop; // Y19 diff --git a/src/sys/mako_midi.cpp b/src/sys/mako_midi.cpp index 170a521..d9b40b6 100644 --- a/src/sys/mako_midi.cpp +++ b/src/sys/mako_midi.cpp @@ -6,6 +6,7 @@ #include "mako.h" #include "dri.h" +#include "crc32.h" extern HINSTANCE g_hinst; extern HWND g_hwnd; @@ -228,13 +229,12 @@ void MAKO::play_midi() } else if(d0 == 0xeb) { play[i].pan = next_mml(i); send_3bytes(0xb0 + play[i].channel, 0x0a, play[i].pan); - } -#if !defined(_DPS) - else if(d0 == 0xec) { - mute_flag = true; - } + } else if(d0 == 0xec) { +#if defined(_SYSTEM1) + if(!(nact->crc32_a == CRC32_DPS || nact->crc32_a == CRC32_DPS_SG || nact->crc32_a == CRC32_DPS_SG2 || nact->crc32_a == CRC32_DPS_SG3)) #endif - else if(d0 == 0xf5) { + mute_flag = true; + } else if(d0 == 0xf5) { int n = next_mml(i); if(n != play[i].timbre) { if(mda[n].bank_select < 128) { @@ -291,9 +291,9 @@ void MAKO::play_midi() bool MAKO::load_mml(int page) { // データ読み込み - DRI* dri = new DRI(); + DRI *dri = new DRI(); int size; - uint8* data = dri->load(amus, page, &size); + uint8 *data = dri->load(amus, page, &size); if(data == NULL) { delete dri; return false; @@ -478,18 +478,18 @@ void MAKO::load_mda(int page) tempo_dif = 0x40; // MDAデータの読み込み - _TCHAR path[16]; - _tcscpy_s(path, 16, amus); - int p = _tcslen(path); - path[p - 3] = _T('M'); - path[p - 2] = _T('D'); - path[p - 1] = _T('A'); + char path[16]; + strcpy_s(path, 16, amus); + int p = strlen(path); + path[p - 3] = 'M'; + path[p - 2] = 'D'; + path[p - 1] = 'A'; - DRI* dri = new DRI(); + DRI *dri = new DRI(); int size; - uint8* data = NULL; + uint8 *data = NULL; if((data = dri->load(path, page, &size)) == NULL) { - data = dri->load_mda(g_hinst, nact->crc32, page, &size); + data = dri->load_mda(g_hinst, nact->crc32_a, nact->crc32_b, page, &size); } if(data) { @@ -500,7 +500,7 @@ void MAKO::load_mda(int page) // SSGパートの音色設定 for(int i = 0; i < 3; i++) { - uint8* buf = &data[map_wide * i + 27]; + uint8 *buf = &data[map_wide * i + 27]; mda[i + 256].bank_select = buf[0]; mda[i + 256].program_change = buf[1]; mda[i + 256].level = buf[2]; @@ -512,7 +512,7 @@ void MAKO::load_mda(int page) // 通常の音色設定 for(int i = 0; i < inst_num; i++) { - uint8* buf = &data[27 + map_wide * 3 + (map_wide + 1) * i]; + uint8 *buf = &data[27 + map_wide * 3 + (map_wide + 1) * i]; int n = buf[0]; mda[n].bank_select = buf[1]; mda[n].program_change = buf[2]; @@ -525,7 +525,7 @@ void MAKO::load_mda(int page) // ドラムパートの音色設定 if(drum_format) { - uint8* buf = &data[27 + map_wide * 3 + (map_wide + 1) * inst_num]; + uint8 *buf = &data[27 + map_wide * 3 + (map_wide + 1) * inst_num]; int drum_num = buf[0]; for(int i = 0; i < drum_num; i++) { int d = buf[i * 3 + 1]; diff --git a/src/sys/nact.cpp b/src/sys/nact.cpp index a8022e5..dfd77e4 100644 --- a/src/sys/nact.cpp +++ b/src/sys/nact.cpp @@ -4,23 +4,22 @@ [ NACT ] */ -#if defined(_SYSTEM1) -#include "../res1/resource.h" -#elif defined(_SYSTEM2) -#include "../res2/resource.h" -#else -#include "../res3/resource.h" -#endif - #include #include #include "nact.h" #include "ags.h" #include "mako.h" #include "dri.h" +#include "crc32.h" #include "../fileio.h" +#if defined(_SYSTEM1) +#include "../res1/resource.h" +#elif defined(_SYSTEM2) +#include "../res2/resource.h" +#elif defined(_SYSTEM3) +#include "../res3/resource.h" +#endif -extern _TCHAR g_root[_MAX_PATH]; extern HWND g_hwnd; // 初期化 @@ -34,28 +33,26 @@ NACT::NACT() initialize_console(); // SYSTEM3 初期化 - - crc32 = calc_crc32(); + crc32_a = calc_crc32("ADISK.DAT"); + crc32_b = calc_crc32("BDISK.DAT"); fatal_error = post_quit = false; // AG00.DAT読み込み - FILEIO* fio = new FILEIO(); - _TCHAR file_path[_MAX_PATH]; - _stprintf_s(file_path, _MAX_PATH, _T("%sAG00.DAT"), g_root); + FILEIO *fio = new FILEIO(); - if(fio->Fopen(file_path, FILEIO_READ_BINARY)) { + 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(); @@ -64,9 +61,9 @@ NACT::NACT() // ADISK.DAT #if defined(_PROG_OMAKE) - _tcscpy_s(adisk, 16, _T("AGAME.DAT")); + strcpy_s(adisk, 16, "AGAME.DAT"); #else - _tcscpy_s(adisk, 16, _T("ADISK.DAT")); + strcpy_s(adisk, 16, "ADISK.DAT"); #endif // シナリオ管理 @@ -104,18 +101,20 @@ NACT::NACT() pcm_index = 0; memset(pcm, 0, sizeof(pcm)); +#if defined(_SYSTEM1) // SYETEM1 初期化 -#if defined(_DPS) - text_refresh = false; - _tcscpy_s(tvar[0], 22, _T("カスタム")); - _tcscpy_s(tvar[1], 22, _T("リーナス")); - _tcscpy_s(tvar[2], 22, _T("かつみ")); - _tcscpy_s(tvar[3], 22, _T("由美子")); - _tcscpy_s(tvar[4], 22, _T("いつみ")); - _tcscpy_s(tvar[5], 22, _T("ひとみ")); - _tcscpy_s(tvar[6], 22, _T("真理子")); -#elif defined(_INTRUDER) - paint_x = paint_y = map_page = 0; + if(crc32_a == CRC32_DPS || crc32_a == CRC32_DPS_SG || crc32_a == CRC32_DPS_SG2 || crc32_a == CRC32_DPS_SG3) { + text_refresh = false; + sprintf_s(tvar[0], 22, "カスタム"); + sprintf_s(tvar[1], 22, "リーナス"); + sprintf_s(tvar[2], 22, "かつみ"); + sprintf_s(tvar[3], 22, "由美子"); + sprintf_s(tvar[4], 22, "いつみ"); + sprintf_s(tvar[5], 22, "ひとみ"); + sprintf_s(tvar[6], 22, "真理子"); + } else if(crc32_a == CRC32_INTRUDER) { + paint_x = paint_y = map_page = 0; + } #endif // 各種クラス生成 @@ -204,6 +203,7 @@ void NACT::execute() #endif // 1コマンド実行 + prev_addr = scenario_addr; uint8 cmd = getd(); if(set_palette && cmd != 'P') { @@ -329,16 +329,18 @@ void NACT::execute() 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); -#if defined(_DPS) - if(!ags->draw_menu) { - text_refresh = false; + +#if defined(_SYSTEM1) + 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; + } } #endif - if(!ags->draw_menu && text_wait_enb && cmd != 0x20) { DWORD dwTime = timeGetTime() + text_wait_time; for(;;) { @@ -355,10 +357,13 @@ void NACT::execute() Sleep(10); } } - -#if defined(_DEBUG_CONSOLE) + if(!ags->draw_hankaku) { + uint16 code = ags->convert_zenkaku(cmd); + string[0] = code >> 8; + string[1] = code & 0xff; + string[2] = '\0'; + } output_console(string); -#endif } else if((0x81 <= cmd && cmd <= 0x9f) || 0xe0 <= cmd) { // message (2 bytes) char string[3]; @@ -366,12 +371,14 @@ void NACT::execute() string[1] = getd(); string[2] = '\0'; ags->draw_text(string); -#if defined(_DPS) - if(!ags->draw_menu) { - text_refresh = false; + +#if defined(_SYSTEM1) + 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; + } } #endif - if(!ags->draw_menu && text_wait_enb) { DWORD dwTime = timeGetTime() + text_wait_time; for(;;) { @@ -388,19 +395,14 @@ void NACT::execute() Sleep(10); } } - -#if defined(_DEBUG_CONSOLE) output_console(string); -#endif } else { + if(cmd >= 0x20 && cmd < 0x7f) { + output_console("\nUnknown Command: '%c' at page = %d, addr = %d\n", cmd, scenario_page, prev_addr); + } else { + output_console("\nUnknown Command: %02x at page = %d, addr = %d\n", cmd, scenario_page, prev_addr); + } fatal_error = true; - -#if defined(_DEBUG_CONSOLE) - char log[128]; - memset(log, 0, sizeof(log)); - sprintf_s(log, 128, "\nFAILED: %2x, %d", cmd, scenario_addr); - output_console(log); -#endif } break; } @@ -411,7 +413,7 @@ void NACT::load_scenario(int page) if(scenario_data) { free(scenario_data); } - DRI* dri = new DRI(); + DRI *dri = new DRI(); if((scenario_data = dri->load(adisk, page + 1, &scenario_size)) == NULL) { fatal_error = true; } @@ -422,13 +424,44 @@ 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); return (uint16)(((uint32)range * (seed & 0xffff)) >> 16) + 1; } +void NACT::wait_after_open_menu() +{ + // 連打による誤クリック防止 + DWORD dwTime = timeGetTime(); + DWORD dwWait = dwTime + 400; + + while(dwTime < dwWait) { + if(params.terminate) { + return; + } +/* + if(get_key() == 16) { + break; + } +*/ + Sleep(10); + dwTime = timeGetTime(); + } + + // クリック中の間は待機 + for(;;) { + if(params.terminate) { + return; + } + if(!get_key()) { + break; + } + Sleep(10); + } +} + // WinMainとのインターフェース int NACT::get_screen_height() @@ -490,11 +523,11 @@ void NACT::initialize_console() AllocConsole(); hConsole = GetStdHandle(STD_OUTPUT_HANDLE); #if defined(_SYSTEM1) - SetConsoleTitle("SYSTEM1 NACT Tracer"); + SetConsoleTitle(_T("SYSTEM1 NACT Tracer")); #elif defined(_SYSTEM2) - SetConsoleTitle("SYSTEM2 NACT Tracer"); -#else - SetConsoleTitle("SYSTEM3 NACT Tracer"); + SetConsoleTitle(_T("SYSTEM2 NACT Tracer")); +#elif defined(_SYSTEM3) + SetConsoleTitle(_T("SYSTEM3 NACT Tracer")); #endif #endif } @@ -506,17 +539,24 @@ void NACT::release_console() #endif } -void NACT::output_console(char log[]) +void NACT::output_console(const char *format, ...) { #if defined(_DEBUG_CONSOLE) + va_list ap; + char buffer[1024]; + + va_start(ap, format); + vsprintf_s(buffer, sizeof(buffer), format, ap); + va_end(ap); + DWORD dwWritten; - WriteConsole(hConsole, log, strlen(log), &dwWritten, NULL); + WriteConsoleA(hConsole, buffer, strlen(buffer), &dwWritten, NULL); #endif } BOOL CALLBACK NACT::TextDialogProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) { - static NACT* nact; + static NACT *nact; char string[64]; int pnt, cnt; @@ -529,8 +569,8 @@ BOOL CALLBACK NACT::TextDialogProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lP nact = (NACT *)lParam; // init dialog sprintf_s(string, 64, "文字列を入力してください(最大%d文字)", nact->tvar_maxlen); - Edit_SetText(GetDlgItem(hDlg, IDC_TEXT), string); - Edit_SetText(GetDlgItem(hDlg, IDC_EDITBOX), nact->tvar[nact->tvar_index - 1]); + SetWindowTextA(GetDlgItem(hDlg, IDC_TEXT), string); + SetWindowTextA(GetDlgItem(hDlg, IDC_EDITBOX), nact->tvar[nact->tvar_index - 1]); if(nact->tvar[nact->tvar_index - 1][0] == '\0') { EnableWindow(GetDlgItem(hDlg, IDOK), FALSE); } else { @@ -541,7 +581,7 @@ BOOL CALLBACK NACT::TextDialogProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lP case WM_COMMAND: switch(LOWORD(wParam)) { case IDC_EDITBOX: - GetDlgItemText(hDlg, IDC_EDITBOX, string, 32); + GetDlgItemTextA(hDlg, IDC_EDITBOX, string, 32); pnt = cnt = 0; while(string[pnt] != '\0') { unsigned char dat = string[pnt]; @@ -558,7 +598,7 @@ BOOL CALLBACK NACT::TextDialogProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lP } break; case IDOK: - GetDlgItemText(hDlg, IDC_EDITBOX, string, 32); + GetDlgItemTextA(hDlg, IDC_EDITBOX, string, 32); strcpy_s(nact->tvar[nact->tvar_index - 1], 22, string); EndDialog(hDlg, IDOK); break; diff --git a/src/sys/nact.h b/src/sys/nact.h index c2be2c5..2cc382a 100644 --- a/src/sys/nact.h +++ b/src/sys/nact.h @@ -90,8 +90,8 @@ class MAKO; class NACT { protected: - AGS* ags; - MAKO* mako; + AGS *ags; + MAKO *mako; private: // コマンドパーサ @@ -102,14 +102,14 @@ private: bool post_quit; // ADISK.DAT, ASLEEP.DAT - _TCHAR adisk[16]; + char adisk[16]; // シナリオデータ - uint8* scenario_data; + uint8 *scenario_data; int scenario_size; // アドレス、ページ管理 - int scenario_addr; + int scenario_addr, prev_addr; int scenario_page; int label_depth; int label_stack[MAX_STACK]; @@ -169,13 +169,12 @@ private: #if defined(_SYSTEM1) void opening(); -#if defined(_DPS) + // D.P.S. - Dream Program System bool text_refresh; -#elif defined(_INTRUDER) + // Intruder -桜屋敷の探索- int paint_x; // Intruder Zコマンド int paint_y; int map_page; -#endif #endif bool column; // 座標モード @@ -211,8 +210,10 @@ private: uint16 random(uint16 range); uint32 seed; + void wait_after_open_menu(); + uint8 get_key(); - void get_cursor(int* x, int* y); + void get_cursor(int *x, int *y); void set_cursor(int x, int y); int joy_num; @@ -220,14 +221,14 @@ private: uint8 key[256]; int mouse_x, mouse_y; - uint32 calc_crc32(); + uint32 calc_crc32(const char *file_name); // Y27 ダイアログ static BOOL CALLBACK TextDialogProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam); // メインスレッド typedef struct { - NACT* nact; + NACT *nact; bool terminate; } PARAMS, *PPARAMS; PARAMS params; @@ -253,18 +254,19 @@ public: void select_cursor(); void select_sound(int dev); - bool get_title(_TCHAR title[], int length); + bool get_title(_TCHAR *title, int length); bool text_skip_enb; // メッセージスキップ bool text_wait_enb; // テキスト表示のウェイト有効/無効 - 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]; + char tvar[10][33]; int tvar_index, tvar_maxlen; // デバッグログ - void output_console(char log[]); + void output_console(const char *format, ...); }; #endif diff --git a/src/sys/nact_crc32.cpp b/src/sys/nact_crc32.cpp index f446879..fafa6b0 100644 --- a/src/sys/nact_crc32.cpp +++ b/src/sys/nact_crc32.cpp @@ -8,17 +8,12 @@ #include "crc32.h" #include "../fileio.h" -extern _TCHAR g_root[_MAX_PATH]; - -uint32 NACT::calc_crc32() +uint32 NACT::calc_crc32(const char *file_name) { uint32 crc = 0; - FILEIO* fio = new FILEIO(); + FILEIO *fio = new FILEIO(); - _TCHAR file_path[_MAX_PATH]; - _stprintf_s(file_path, _MAX_PATH, _T("%sADISK.DAT"), g_root); - - if(fio->Fopen(file_path, FILEIO_READ_BINARY)) { + if(fio->Fopen(file_name, FILEIO_READ_BINARY)) { uint32 table[256]; for(int i = 0; i < 256; i++) { uint32 c = i; @@ -40,93 +35,123 @@ uint32 NACT::calc_crc32() } fio->Fclose(); } -#if defined(_SYSTEM2) - if(crc == CRC32_SDPS) { - // Super D.P.Sの場合はBDISK.DATのCRCを取る - _stprintf_s(file_path, _MAX_PATH, _T("%sBDISK.DAT"), g_root); - - if(fio->Fopen(file_path, 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(); - } - } -#endif delete fio; -#if 0 -FILE* fp = fopen("crc32.txt", "w"); -fprintf(fp, "%x\n", crc); -fclose(fp); -#endif return crc; } -bool NACT::get_title(_TCHAR title[], int length) +bool NACT::get_title(_TCHAR *title, int length) { #if defined(_SYSTEM1) - -#if defined(_CRESCENT) - _tcscpy_s(title, length, _T("クレセントムーンがぁる")); - return true; -#elif defined(_DPS) - _tcscpy_s(title, length, _T("D.P.S - Dream Program System")); - return true; -#elif defined(_FUKEI) - _tcscpy_s(title, length, _T("婦警さんVX")); - return true; -#elif defined(_INTRUDER) - _tcscpy_s(title, length, _T("Intruder -桜屋敷の探索-")); - return true; -#elif defined(_TENGU) - _tcscpy_s(title, length, _T("あぶないてんぐ伝説")); - return true; -#elif defined(_VAMPIRE) - _tcscpy_s(title, length, _T("Little Vampire")); - return true; -#else - title[0] = _T('\0'); - return false; -#endif - + switch(crc32_a) { + case CRC32_BUNKASAI: + _tcscpy_s(title, length, _T("あぶない文化祭前夜")); + return true; + case CRC32_CRESCENT: + _tcscpy_s(title, length, _T("クレセントムーンがぁる")); + return true; + case CRC32_DPS: + _tcscpy_s(title, length, _T("D.P.S - Dream Program System")); + return true; + case CRC32_DPS_SG: +// case CRC32_DPS_SG2: + switch(crc32_b) { + case CRC32_DPS_SG_FAHREN: + _tcscpy_s(title, length, _T("D.P.S SG - Fahren Fliegen")); + return true; + case CRC32_DPS_SG_KATEI: + _tcscpy_s(title, length, _T("D.P.S SG - 家庭教師はステキなお仕事")); + return true; + case CRC32_DPS_SG_NOBUNAGA: + _tcscpy_s(title, length, _T("D.P.S SG - 信長の淫謀")); + return true; + case CRC32_DPS_SG2_ANTIQUE: + _tcscpy_s(title, length, _T("D.P.S SG set2 - ANTIQUE HOUSE")); + return true; + case CRC32_DPS_SG2_IKENAI: + _tcscpy_s(title, length, _T("D.P.S SG set2 - いけない内科検診再び")); + return true; + case CRC32_DPS_SG2_AKAI: + _tcscpy_s(title, length, _T("D.P.S SG set2 - 朱い夜")); + return true; + } + _tcscpy_s(title, length, _T("D.P.S SG")); + return true; + case CRC32_DPS_SG3: + switch(crc32_b) { + case CRC32_DPS_SG3_RABBIT: + _tcscpy_s(title, length, _T("D.P.S SG set3 - Rabbit P4P")); + return true; + case CRC32_DPS_SG3_SHINKON: + _tcscpy_s(title, length, _T("D.P.S SG set3 - しんこんさんものがたり")); + return true; + case CRC32_DPS_SG3_SOTSUGYOU: + _tcscpy_s(title, length, _T("D.P.S SG set3 - 卒業")); + return true; + } + _tcscpy_s(title, length, _T("D.P.S SG set3")); + return true; + case CRC32_FUKEI: + _tcscpy_s(title, length, _T("婦警さんVX")); + return true; + case CRC32_INTRUDER: + _tcscpy_s(title, length, _T("Intruder -桜屋敷の探索-")); + return true; + case CRC32_TENGU: + _tcscpy_s(title, length, _T("あぶないてんぐ伝説")); + return true; + case CRC32_TOUSHIN_HINT: + _tcscpy_s(title, length, _T("闘神都市 ヒントディスク")); + return true; + case CRC32_VAMPIRE: + _tcscpy_s(title, length, _T("Little Vampire")); + return true; + case CRC32_YAKATA: + _tcscpy_s(title, length, _T("ALICEの館")); + return true; + } #elif defined(_SYSTEM2) - - switch(crc32) { + switch(crc32_a) { + case CRC32_AYUMI_FD: + _tcscpy_s(title, length, _T("あゆみちゃん物語")); + return true; + case CRC32_AYUMI_HINT: + _tcscpy_s(title, length, _T("あゆみちゃん物語 ヒントディスク")); + return true; case CRC32_AYUMI_PROTO: _tcscpy_s(title, length, _T("あゆみちゃん物語 PROTO")); return true; - case CRC32_SDPS_MARIA: - case CRC32_SDPS_TONO: - case CRC32_SDPS_KAIZOKU: - _tcscpy_s(title, length, _T("Super D.P.S")); + case CRC32_DALK_HINT: + _tcscpy_s(title, length, _T("DALK ヒントディスク")); + return true; + case CRC32_DRSTOP: + _tcscpy_s(title, length, _T("Dr. STOP!")); return true; case CRC32_PROSTUDENTG_FD: _tcscpy_s(title, length, _T("prostudent G")); return true; + case CRC32_RANCE3_HINT: + _tcscpy_s(title, length, _T("Rance3 ヒントディスク")); + return true; + case CRC32_SDPS: + switch(crc32_b) { + case CRC32_SDPS_MARIA: + _tcscpy_s(title, length, _T("Super D.P.S - マリアとカンパン")); + return true; + case CRC32_SDPS_TONO: + _tcscpy_s(title, length, _T("Super D.P.S - 遠野の森")); + return true; + case CRC32_SDPS_KAIZOKU: + _tcscpy_s(title, length, _T("Super D.P.S - うれしたのし海賊稼業")); + return true; + } + _tcscpy_s(title, length, _T("Super D.P.S")); + return true; + case CRC32_YAKATA2: + _tcscpy_s(title, length, _T("ALICEの館II")); + return true; } - title[0] = _T('\0'); - return false; - -#else - - switch(crc32) { +#elif defined(_SYSTEM3) + switch(crc32_a) { case CRC32_AMBIVALENZ_FD: case CRC32_AMBIVALENZ_CD: _tcscpy_s(title, length, _T("AmbivalenZ −二律背反−")); @@ -170,6 +195,9 @@ bool NACT::get_title(_TCHAR title[], int length) case CRC32_HASHIRIONNA2: _tcscpy_s(title, length, _T("走り女2")); return true; + case CRC32_TOUSHIN2_GD: + _tcscpy_s(title, length, _T("闘神都市2 グラフィックディスク")); + return true; case CRC32_TOUSHIN2_SP: _tcscpy_s(title, length, _T("闘神都市2 そして、それから…")); return true; @@ -183,9 +211,8 @@ bool NACT::get_title(_TCHAR title[], int length) _tcscpy_s(title, length, _T("夢幻泡影")); return true; } +#endif title[0] = _T('\0'); return false; - -#endif } diff --git a/src/sys/nact_dialog.cpp b/src/sys/nact_dialog.cpp deleted file mode 100644 index 83c4fc8..0000000 --- a/src/sys/nact_dialog.cpp +++ /dev/null @@ -1,67 +0,0 @@ - -BOOL CALLBACK NACT::TextDialogProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) -{ - _TCHAR string[64]; - char origin[22]; - - switch(msg) { - case WM_CLOSE: - EndDialog(hDlg, IDCANCEL); - break; - - case WM_INITDIALOG: - { - // ダイアログの初期化 - _TCHAR string[256]; - _stprintf_s(string, 258, _T("文字列を入力してください (最大%d文字)"), tvar_length); - Edit_SetText(GetDlgItem(hDlg, IDC_TEXT), string); - - char origin[22]; - memcpy(origin, tvar[tvar_index - 1], 22); - Edit_SetText(GetDlgItem(hDlg, IDC_EDITBOX), origin); - if(origin[0] == '\0') { - EnableWindow(GetDlgItem(hDlg, IDOK), FALSE); - } else { - EnableWindow(GetDlgItem(hDlg, IDOK), TRUE); - } - } - break; - - case WM_COMMAND: - switch(LOWORD(wParam)) { - case IDC_EDITBOX: - { - GetDlgItemText(hDlg, IDC_EDITBOX, string, 32); - int p = 0, cnt = 0; - while(string[p] != _T('\0')) { - int c = string[p]; - if((0x81 <= c && c <= 0x9f) || 0xe0 <= c) { - p++; - } - p++; - cnt++; - } - if(cnt == 0 || cnt > tvar_length) { - EnableWindow(GetDlgItem(hDlg, IDOK), FALSE); - } else { - EnableWindow(GetDlgItem(hDlg, IDOK), TRUE); - } - } - break; - - case IDOK: - GetDlgItemText(hDlg, IDC_EDITBOX, string, 32); - strcpy(tvar[tvar_index - 1], string); - EndDialog(hDlg, IDOK); - break; - default: - return FALSE; - } - break; - - default: - return FALSE; - } - return TRUE; -} - diff --git a/src/sys/nact_input.cpp b/src/sys/nact_input.cpp index 1dbeb4b..8f58422 100644 --- a/src/sys/nact_input.cpp +++ b/src/sys/nact_input.cpp @@ -42,7 +42,7 @@ uint8 NACT::get_key() return val; } -void NACT::get_cursor(int* x, int* y) +void NACT::get_cursor(int *x, int *y) { POINT pt; GetCursorPos(&pt); diff --git a/src/sys/nact_sys1.cpp b/src/sys/nact_sys1.cpp index 1e0e1bf..bda3b5c 100644 --- a/src/sys/nact_sys1.cpp +++ b/src/sys/nact_sys1.cpp @@ -18,11 +18,7 @@ #include "../fileio.h" // メニューの改ページ -#if defined(_INTRUDER) -#define MENU_MAX 6 -#else -#define MENU_MAX 11 -#endif +#define MENU_MAX (crc32_a == CRC32_INTRUDER ? 6 : 11) #define WAIT(tm) \ { \ @@ -67,28 +63,27 @@ } \ } -extern _TCHAR g_root[_MAX_PATH]; extern HWND g_hwnd; void NACT::opening() { -#if defined(_CRESCENT) - mako->play_music(2); - ags->load_cg(1, -1); - WAIT(3000); - ags->load_cg(81, -1); -#elif defined(_INTRUDER) - ags->load_cg(77, -1); - WAIT(1667) - ags->load_cg(74, -1); -#elif defined(_VAMPIRE) - mako->play_music(4); - ags->load_cg(3, -1); - WAIT(2000) - ags->load_cg(38, -1); - cmd_a(); - ags->draw_box(0); -#endif + if(crc32_a == CRC32_CRESCENT) { + mako->play_music(2); + ags->load_cg(1, -1); + WAIT(3000); + ags->load_cg(81, -1); + } else if(crc32_a == CRC32_INTRUDER) { + ags->load_cg(77, -1); + WAIT(1667) + ags->load_cg(74, -1); + } else if(crc32_a == CRC32_VAMPIRE) { + mako->play_music(4); + ags->load_cg(3, -1); + WAIT(2000) + ags->load_cg(38, -1); + cmd_a(); + ags->draw_box(0); + } } void NACT::cmd_calc() @@ -101,11 +96,7 @@ void NACT::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::cmd_branch() @@ -115,7 +106,9 @@ void NACT::cmd_branch() bool set_menu = false; if(!condition) { + // 次の'}'命令までスキップする(ネストも考慮する) for(;;) { + prev_addr = scenario_addr; uint8 cmd = getd(); if(cmd == '!') { @@ -134,19 +127,16 @@ void NACT::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; @@ -154,14 +144,12 @@ void NACT::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') { @@ -197,17 +185,18 @@ void NACT::cmd_branch() // message (2 bytes) getd(); } else { + if(cmd >= 0x20 && cmd < 0x7f) { + output_console("\nUnknown Command: '%c' at page = %d, addr = %d\n", cmd, scenario_page, prev_addr); + } else { + output_console("\nUnknown Command: %02x at page = %d, addr = %d\n", cmd, scenario_page, prev_addr); + } fatal_error = true; break; } } } -#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::cmd_label_jump() @@ -215,22 +204,14 @@ void NACT::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::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) { // リターン @@ -252,22 +233,14 @@ void NACT::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::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) { // リターン @@ -294,11 +267,7 @@ void NACT::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(); @@ -309,48 +278,27 @@ void NACT::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::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); return; } -#if defined(_DPS) - if(!text_refresh) { - cmd_a(); - } -#endif - - // クリック中の間は待機 - for(;;) { - if(params.terminate) { - return; + 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(); } -// if(get_key() != 32) { - if(!get_key()) { - break; - } - Sleep(10); } // メニュー表示 ags->open_menu_window(menu_window); - int current_index = 0; // マウス移動 int sx = ags->menu_w[menu_window - 1].sx; @@ -359,17 +307,20 @@ void NACT::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(;;) { + for(bool selectable = true;;) { // 入力待機 int val = 0, current_mx = mx, current_my = my; for(;;) { if(params.terminate) { return; } - if(val = get_key()) { + if((val = get_key()) != 0) { Sleep(100); break; } @@ -398,6 +349,9 @@ void NACT::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) { @@ -410,7 +364,8 @@ void NACT::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; @@ -441,11 +396,7 @@ void NACT::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::cmd_set_verbobj2() @@ -462,21 +413,14 @@ void NACT::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::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; // 表示する動詞のチェック @@ -540,21 +484,8 @@ top2: } ags->draw_menu = false; - // クリック中の間は待機 - for(;;) { - if(params.terminate) { - return; - } -// if(get_key() != 32) { - if(!get_key()) { - break; - } - Sleep(10); - } - // メニュー表示 ags->open_menu_window(menu_window); - int current_index = 0; // マウス移動 int sx = ags->menu_w[menu_window - 1].sx; @@ -563,17 +494,20 @@ 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(;;) { + for(bool selectable = true;;) { // 入力待機 int val = 0, current_mx = mx, current_my = my; for(;;) { if(params.terminate) { return; } - if(val = get_key()) { + if((val = get_key()) != 0) { Sleep(100); break; } @@ -602,6 +536,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) { @@ -614,7 +551,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; @@ -728,21 +666,8 @@ top2: } ags->draw_menu = false; - // クリック中の間は待機 - for(;;) { - if(params.terminate) { - return; - } -// if(get_key() != 32) { - if(!get_key()) { - break; - } - Sleep(10); - } - // メニュー表示 ags->open_menu_window(menu_window); - int current_index = 0; // マウス移動 int sx = ags->menu_w[menu_window - 1].sx; @@ -751,17 +676,20 @@ 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(;;) { + for(bool selectable = true;;) { // 入力待機 int val = 0, current_mx = mx, current_my = my; for(;;) { if(params.terminate) { return; } - if(val = get_key()) { + if((val = get_key()) != 0) { Sleep(100); break; } @@ -790,6 +718,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) { @@ -802,7 +733,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; @@ -827,11 +759,7 @@ top2: void NACT::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マークの表示 @@ -864,33 +792,35 @@ void NACT::cmd_a() // ウィンドウ更新 ags->clear_text_window(text_window, true); -#if defined(_DPS) - text_refresh = true; -#endif + 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::cmd_b() { // 未使用 + output_console("\nUnknown Command: 'B' at page = %d, addr = %d\n", scenario_page, prev_addr); + fatal_error = true; } void NACT::cmd_d() { // 未使用 + output_console("\nUnknown Command: 'D' at page = %d, addr = %d\n", scenario_page, prev_addr); + fatal_error = true; } void NACT::cmd_e() { // 未使用 + output_console("\nUnknown Command: 'E' at page = %d, addr = %d\n", scenario_page, prev_addr); + fatal_error = true; } void NACT::cmd_f() { -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nF"); - output_console(log); -#endif + output_console("\nF"); scenario_addr = 2; } @@ -899,67 +829,65 @@ void NACT::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 defined(_INTRUDER) - page = (page == 97) ? 96 : (page == 98) ? 97 : page; -#endif + if(crc32_a == CRC32_INTRUDER) { + page = (page == 97) ? 96 : (page == 98) ? 97 : page; + } ags->load_cg(page, -1); -#if defined(_INTRUDER) - if(page == 94) { - WAIT(400) + if(crc32_a == CRC32_INTRUDER) { + if(page == 94) { + WAIT(400) + } + if(page == 81 || page == 82) { + map_page = page; + } } - if(page == 81 || page == 82) { - map_page = page; - } -#endif } void NACT::cmd_h() { // 未使用 + output_console("\nUnknown Command: 'H' at page = %d, addr = %d\n", scenario_page, prev_addr); + fatal_error = true; } void NACT::cmd_i() { // 未使用 + output_console("\nUnknown Command: 'I' at page = %d, addr = %d\n", scenario_page, prev_addr); + fatal_error = true; } void NACT::cmd_j() { // 未使用 + output_console("\nUnknown Command: 'J' at page = %d, addr = %d\n", scenario_page, prev_addr); + fatal_error = true; } void NACT::cmd_k() { // 未使用 + output_console("\nUnknown Command: 'K' at page = %d, addr = %d\n", scenario_page, prev_addr); + fatal_error = true; } void NACT::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 - _TCHAR path[_MAX_PATH], file_path[_MAX_PATH]; - _tcscpy_s(path, _MAX_PATH, _T("ASLEEP_A.DAT")); - path[7] = _T('A') + index - 1; - _stprintf_s(file_path, _MAX_PATH, _T("%s%s"), g_root, path); + char file_name[_MAX_PATH]; + sprintf_s(file_name, _MAX_PATH, "ASLEEP_%c.DAT", 'A' + index - 1); - FILEIO* fio = new FILEIO(); - if(fio->Fopen(file_path, FILEIO_READ_BINARY)) { + FILEIO *fio = new FILEIO(); + if(fio->Fopen(file_name, FILEIO_READ_BINARY)) { fio->Fseek(112, FILEIO_SEEK_SET); int next_page = fio->Fgetw() - 1; @@ -1053,16 +981,22 @@ void NACT::cmd_l() void NACT::cmd_m() { // 未使用 + output_console("\nUnknown Command: 'M' at page = %d, addr = %d\n", scenario_page, prev_addr); + fatal_error = true; } void NACT::cmd_n() { // 未使用 + output_console("\nUnknown Command: 'N' at page = %d, addr = %d\n", scenario_page, prev_addr); + fatal_error = true; } void NACT::cmd_o() { // 未使用 + output_console("\nUnknown Command: 'O' at page = %d, addr = %d\n", scenario_page, prev_addr); + fatal_error = true; } void NACT::cmd_p() @@ -1071,11 +1005,7 @@ void NACT::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) { \ @@ -1102,21 +1032,15 @@ void NACT::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 - _TCHAR path[_MAX_PATH], file_path[_MAX_PATH]; - _tcscpy_s(path, _MAX_PATH, _T("ASLEEP_A.DAT")); - path[7] = _T('A') + index - 1; - _stprintf_s(file_path, _MAX_PATH, _T("%s%s"), g_root, path); + char file_name[_MAX_PATH]; + sprintf_s(file_name, _MAX_PATH, "ASLEEP_%c.DAT", 'A' + index - 1); - FILEIO* fio = new FILEIO(); - if(fio->Fopen(file_path, FILEIO_WRITE_BINARY)) { + FILEIO *fio = new FILEIO(); + if(fio->Fopen(file_name, FILEIO_WRITE_BINARY)) { uint8 buffer[9510]; int p = 0; @@ -1184,11 +1108,7 @@ void NACT::cmd_q() void NACT::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)) { @@ -1200,11 +1120,7 @@ void NACT::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); @@ -1216,6 +1132,8 @@ void NACT::cmd_s() void NACT::cmd_t() { // 未使用 + output_console("\nUnknown Command: 'T' at page = %d, addr = %d\n", scenario_page, prev_addr); + fatal_error = true; } void NACT::cmd_u() @@ -1223,42 +1141,38 @@ void NACT::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 defined(_INTRUDER) - ags->load_cg(page, 11); + if(crc32_a == CRC32_INTRUDER) { + ags->load_cg(page, 11); - if(page == 5) { - WAIT(400) + if(page == 5) { + WAIT(400) + } + } else { + ags->load_cg(page, transparent); } -#else - ags->load_cg(page, transparent); -#endif } void NACT::cmd_v() { // 未使用 + output_console("\nUnknown Command: 'V' at page = %d, addr = %d\n", scenario_page, prev_addr); + fatal_error = true; } void NACT::cmd_w() { // 未使用 + output_console("\nUnknown Command: 'W' at page = %d, addr = %d\n", scenario_page, prev_addr); + fatal_error = true; } void NACT::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]); @@ -1270,228 +1184,223 @@ void NACT::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); -#if defined(_BUNKASAI) || defined(_CRESCENT) || defined(_DPS) || defined(_FUKEI) || defined(_TENGU) - 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; + if(crc32_a == 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(buf[p] != '0') { + if(params.terminate) { + return; + } + if(get_key()) { break; } - p++; + Sleep(10); } - ags->draw_text(&buf[p < 4 ? p : 4]); - } - break; - case 2: -#if defined(_CRESCENT) - for(int i = 39; i <= 48; i++) { -#elif defined(_DPS) - for(int i = 0; i <= 20; i++) { -#else - for(int i = 0; i <= 16; i++) { -#endif - var[i] = 0; - } - break; - case 3: - WAIT(param * 1000 / 60) - break; - case 4: - RND = (param == 0 || param == 1) ? 0 : random(param); - break; -#if defined(_DPS) - case 7: - if(param == 1) { - ags->box_fill(0, 40, 8, 598, 270, 0); - } - break; -#endif -#if defined(_TENGU) - case 130: - { - 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); + Sleep(100); + for(;;) { + if(params.terminate) { + return; + } + if(!(get_key() & 0x18)) { + break; + } + Sleep(10); } - WAIT_KEYQUIT(6000) - ags->draw_box(param); - } - break; -#endif - case 253: - post_quit = false; - fatal_error = true; - break; - case 254: - RND = 0; - break; - case 255: -#if defined(_DPS) - post_quit = false; -#else - post_quit = true; -#endif - fatal_error = true; - break; - } -#elif defined(_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(params.terminate) { - return; + ags->clear_text_window(text_window, true); + break; + case 2: + if(param == 0) { + post_quit = true; + fatal_error = true; + } else { + WAIT(100) } - if(get_key()) { - break; - } - Sleep(10); - } - Sleep(100); - for(;;) { - if(params.terminate) { - return; - } - if(!(get_key() & 0x18)) { - break; - } - Sleep(10); - } - ags->clear_text_window(text_window, true); - break; - case 2: - if(param == 0) { + break; + case 3: + WAIT(param * 1000) + break; + 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; + } } -#endif } void NACT::cmd_z() { -#if defined(_CRESCENT) - cmd_y(); - return; -#endif + if(crc32_a == CRC32_CRESCENT) { + cmd_y(); + return; + } + 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 defined(_INTRUDER) - if(cmd == 1 && 1 <= param && param <= 4) { - char* buf[4] = {"<", "∧", ">", "∨"}; + if(crc32_a == CRC32_INTRUDER) { + if(cmd == 1 && 1 <= param && param <= 4) { + char *buf[4] = {"<", "∧", ">", "∨"}; - // 矢印を消去する - if(map_page) { - ags->load_cg(map_page, -1); + // 矢印を消去する + if(map_page) { + ags->load_cg(map_page, -1); + if(paint_x) { + ags->paint(paint_x, paint_y * 2, 2 + 16); + } + } + + // 矢印を表示する + int x = ags->text_dest_x; + int y = ags->text_dest_y; + int color = ags->text_font_color; + ags->text_font_size = 24; + ags->text_font_color = 16; + + ags->text_dest_x = 456; + ags->text_dest_y = 103; + ags->draw_text(buf[param - 1]); + + ags->text_dest_x = x; + ags->text_dest_y = y; + ags->text_font_size = 16; + ags->text_font_color = color; + } else if(cmd == 2) { + ags->load_cg(74, -1); + ags->load_cg(81, -1); + map_page = 81; + } else if(cmd == 3) { + RND = (param == 0 || param == 1) ? 0 : random(param); + } else if(460 <= cmd && cmd <= 625 && 20 <= param && param <= 55) { if(paint_x) { - ags->paint(paint_x, paint_y * 2, 2 + 16); + ags->paint(paint_x, paint_y * 2, 5 + 16); + } + ags->paint(cmd, param * 2, 2 + 16); + paint_x = cmd; + paint_y = param; + } else { + paint_x = 0; + } + } else if(crc32_a == CRC32_TENGU) { + if(cmd == 10) { + // nop + } else if(cmd == 20) { + if(param == 20) { + ags->gcopy(8, 8, 46, 144, 2); + } else if(param == 21) { + ags->gcopy(8, 8, 46, 144, 3); } } - - // 矢印を表示する - int x = ags->text_dest_x; - int y = ags->text_dest_y; - int color = ags->text_font_color; - ags->text_font_size = 24; - ags->text_font_color = 16; - - ags->text_dest_x = 456; - ags->text_dest_y = 103; - ags->draw_text(buf[param - 1]); - - ags->text_dest_x = x; - ags->text_dest_y = y; - ags->text_font_size = 16; - ags->text_font_color = color; - } else if(cmd == 2) { - ags->load_cg(74, -1); - ags->load_cg(81, -1); - map_page = 81; - } else if(cmd == 3) { - RND = (param == 0 || param == 1) ? 0 : random(param); - } else if(460 <= cmd && cmd <= 625 && 20 <= param && param <= 55) { - if(paint_x) { - ags->paint(paint_x, paint_y * 2, 5 + 16); - } - ags->paint(cmd, param * 2, 2 + 16); - paint_x = cmd; - paint_y = param; - } else { - paint_x = 0; } -#elif defined(_TENGU) - if(cmd == 10) { - // nop - } else if(cmd == 20) { - if(param == 20) { - ags->gcopy(8, 8, 46, 144, 2); - } else if(param == 21) { - ags->gcopy(8, 8, 46, 144, 3); - } - } -#endif } diff --git a/src/sys/nact_sys2.cpp b/src/sys/nact_sys2.cpp index 751c9d9..75c042d 100644 --- a/src/sys/nact_sys2.cpp +++ b/src/sys/nact_sys2.cpp @@ -11,6 +11,10 @@ #include "mako.h" #include "crc32.h" #include "../fileio.h" +#include "../res2/resource.h" + +extern HINSTANCE g_hinst; +extern HWND g_hwnd; #define WAIT(tm) \ { \ @@ -55,9 +59,6 @@ } \ } -extern _TCHAR g_root[_MAX_PATH]; -extern HWND g_hwnd; - void NACT::cmd_calc() { int index = getd(); @@ -68,11 +69,7 @@ void NACT::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::cmd_branch() @@ -82,7 +79,9 @@ void NACT::cmd_branch() bool set_menu = false; if(!condition) { + // 次の'}'命令までスキップする(ネストも考慮する) for(;;) { + prev_addr = scenario_addr; uint8 cmd = getd(); if(cmd == '!') { @@ -101,19 +100,16 @@ void NACT::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 +117,12 @@ void NACT::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 +158,8 @@ void NACT::cmd_branch() } else if(cmd == 'I') { cali(); cali(); - getd(); +// getd(); + cali(); } else if(cmd == 'J') { cali(); cali(); @@ -204,11 +199,48 @@ void NACT::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(); @@ -228,17 +260,18 @@ void NACT::cmd_branch() // message (2 bytes) getd(); } else { + if(cmd >= 0x20 && cmd < 0x7f) { + output_console("\nUnknown Command: '%c' at page = %d, addr = %d\n", cmd, scenario_page, prev_addr); + } else { + output_console("\nUnknown Command: %02x at page = %d, addr = %d\n", cmd, scenario_page, prev_addr); + } fatal_error = true; break; } } } -#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::cmd_label_jump() @@ -246,22 +279,14 @@ void NACT::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::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) { // リターン @@ -283,22 +308,14 @@ void NACT::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::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) { // リターン @@ -325,11 +342,7 @@ void NACT::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(); @@ -340,42 +353,21 @@ void NACT::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::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); return; } - // クリック中の間は待機 - for(;;) { - if(params.terminate) { - return; - } -// if(get_key() != 32) { - if(!get_key()) { - break; - } - Sleep(10); - } - // メニュー表示 ags->open_menu_window(menu_window); - int current_index = 0; // マウス移動 int sx = ags->menu_w[menu_window - 1].sx; @@ -384,17 +376,20 @@ void NACT::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(;;) { + for(bool selectable = true;;) { // 入力待機 int val = 0, current_mx = mx, current_my = my; for(;;) { if(params.terminate) { return; } - if(val = get_key()) { + if((val = get_key()) != 0) { Sleep(100); break; } @@ -423,6 +418,9 @@ void NACT::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) { @@ -435,7 +433,8 @@ void NACT::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; @@ -466,11 +465,7 @@ void NACT::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::cmd_set_verbobj2() @@ -487,21 +482,14 @@ void NACT::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::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; // 表示する動詞のチェック @@ -530,21 +518,8 @@ void NACT::cmd_open_verb() } ags->draw_menu = false; - // クリック中の間は待機 - for(;;) { - if(params.terminate) { - return; - } -// if(get_key() != 32) { - if(!get_key()) { - break; - } - Sleep(10); - } - // メニュー表示 ags->open_menu_window(menu_window); - int current_index = 0; // マウス移動 int sx = ags->menu_w[menu_window - 1].sx; @@ -553,17 +528,20 @@ void NACT::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(;;) { + for(bool selectable = true;;) { // 入力待機 int val = 0, current_mx = mx, current_my = my; for(;;) { if(params.terminate) { return; } - if(val = get_key()) { + if((val = get_key()) != 0) { Sleep(100); break; } @@ -592,6 +570,9 @@ void NACT::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) { @@ -604,7 +585,8 @@ void NACT::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; @@ -674,21 +656,8 @@ void NACT::cmd_open_obj(int verb) ags->menu_dest_y += ags->menu_font_size + 2; ags->draw_menu = false; - // クリック中の間は待機 - for(;;) { - if(params.terminate) { - return; - } -// if(get_key() != 32) { - if(!get_key()) { - break; - } - Sleep(10); - } - // メニュー表示 ags->open_menu_window(menu_window); - int current_index = 0; // マウス移動 int sx = ags->menu_w[menu_window - 1].sx; @@ -697,17 +666,20 @@ void NACT::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(;;) { + for(bool selectable = true;;) { // 入力待機 int val = 0, current_mx = mx, current_my = my; for(;;) { if(params.terminate) { return; } - if(val = get_key()) { + if((val = get_key()) != 0) { Sleep(100); break; } @@ -736,6 +708,9 @@ void NACT::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) { @@ -748,7 +723,8 @@ void NACT::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; @@ -771,11 +747,7 @@ void NACT::cmd_open_obj(int verb) void NACT::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マークの表示 @@ -819,13 +791,12 @@ void NACT::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) { + 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; @@ -838,7 +809,10 @@ void NACT::cmd_b() ags->menu_w[index - 1].screen = NULL; } } else if(cmd == 2) { -// if(crc32 == CRC32_PROSTUDENTG_FD) { + 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 ags->menu_w[index - 1].frame = p1 ? true : false; @@ -861,9 +835,16 @@ void NACT::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 == 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; @@ -887,11 +868,7 @@ void NACT::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::cmd_e() @@ -900,20 +877,12 @@ void NACT::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::cmd_f() { -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nF"); - output_console(log); -#endif + output_console("\nF"); scenario_addr = 2; } @@ -922,18 +891,24 @@ void NACT::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(crc32_a == CRC32_SDPS && (crc32_b == CRC32_SDPS_TONO || crc32_b == CRC32_SDPS_KAIZOKU)) { if(20 <= page && page <= 100) { page--; } } 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::cmd_h() @@ -941,11 +916,7 @@ void NACT::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]; @@ -985,13 +956,10 @@ void NACT::cmd_i() { int p1 = cali(); int p2 = cali(); - int p3 = getd(); +// int p3 = getd(); + int p3 = cali(); -#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::cmd_j() @@ -999,11 +967,7 @@ void NACT::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::cmd_k() @@ -1016,21 +980,15 @@ void NACT::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 - _TCHAR path[_MAX_PATH], file_path[_MAX_PATH]; - _tcscpy_s(path, _MAX_PATH, _T("ASLEEP_A.DAT")); - path[7] = _T('A') + index - 1; - _stprintf_s(file_path, _MAX_PATH, _T("%s%s"), g_root, path); + char file_name[_MAX_PATH]; + sprintf_s(file_name, _MAX_PATH, "ASLEEP_%c.DAT", 'A' + index - 1); - FILEIO* fio = new FILEIO(); - if(fio->Fopen(file_path, FILEIO_READ_BINARY)) { + FILEIO *fio = new FILEIO(); + if(fio->Fopen(file_name, FILEIO_READ_BINARY)) { fio->Fseek(112, FILEIO_SEEK_SET); int next_page = fio->Fgetw() - 1; @@ -1123,7 +1081,7 @@ void NACT::cmd_l() void NACT::cmd_m() { - char string[22]; + char string[33]; int d, p = 0; while((d = getd()) != ':') { @@ -1137,14 +1095,10 @@ void NACT::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); + memcpy(tvar[tvar_index - 1], string, 33); } } @@ -1153,11 +1107,7 @@ void NACT::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::cmd_o() @@ -1166,29 +1116,25 @@ void NACT::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); +#if 0 // white mesh int sx = (st % 80) * 8; int sy = (int)(st / 80); ags->draw_mesh(sx, sy, width, height); +#endif } void NACT::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); + } -#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) { \ @@ -1215,21 +1161,15 @@ void NACT::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 - _TCHAR path[_MAX_PATH], file_path[_MAX_PATH]; - _tcscpy_s(path, _MAX_PATH, _T("ASLEEP_A.DAT")); - path[7] = _T('A') + index - 1; - _stprintf_s(file_path, _MAX_PATH, _T("%s%s"), g_root, path); + char file_name[_MAX_PATH]; + sprintf_s(file_name, _MAX_PATH, "ASLEEP_%c.DAT", 'A' + index - 1); - FILEIO* fio = new FILEIO(); - if(fio->Fopen(file_path, FILEIO_WRITE_BINARY)) { + FILEIO *fio = new FILEIO(); + if(fio->Fopen(file_name, FILEIO_WRITE_BINARY)) { uint8 buffer[9510]; int p = 0; @@ -1297,11 +1237,7 @@ void NACT::cmd_q() void NACT::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)) { @@ -1313,11 +1249,7 @@ void NACT::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); @@ -1332,70 +1264,86 @@ void NACT::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::cmd_u() { - int page = getd(); - int transparent = getd(); + int page, transparent; -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nU %d,%d:", page, transparent); - output_console(log); -#endif - -#if defined(_INTRUDER) - ags->load_cg(page, 11); - - if(page == 5) { - WAIT(400) + if(crc32_a == CRC32_YAKATA2) { + page = cali(); + transparent = cali(); + } else { + page = getd(); + transparent = getd(); } -#else + + output_console("\nU %d,%d:", page, transparent); + ags->load_cg(page, transparent); -#endif } void NACT::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(); -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nV %d,%d:", p1, p2); - output_console(log); + output_console("\nV %d,%d:", p1, p2); #endif } void NACT::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(); -#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:", sx, sy, ex, ey); + + ags->draw_mesh(sx, sy, ex - sx, ey - sy); } void NACT::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]); @@ -1407,11 +1355,7 @@ void NACT::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: @@ -1454,7 +1398,7 @@ void NACT::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; @@ -1470,9 +1414,18 @@ void NACT::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; + case 27: + { + int tmp = tvar_index; + tvar_index = param; + tvar_maxlen = 8;//param; + DialogBoxParam(g_hinst, MAKEINTRESOURCE(IDD_DIALOG1), g_hwnd, TextDialogProc, (LPARAM)this); + tvar_index = tmp; + } + break; case 40: case 42: - { + if(ags->now_fade()) { DWORD dwStart = timeGetTime(); for(int i = 0; i < 16; i++) { ags->fade_in(i); @@ -1487,11 +1440,13 @@ void NACT::cmd_y() Sleep(0); } } + ags->fade_end(); } break; case 41: case 43: - { + if(!ags->now_fade()) { + ags->fade_start(); DWORD dwStart = timeGetTime(); for(int i = 0; i < 16; i++) { ags->fade_out(i, (cmd == 41) ? false : true); @@ -1538,6 +1493,28 @@ void NACT::cmd_y() case 252: RND = 8; break; + case 253: + // キーが押されて離されるまで待機 + for(;;) { + if(params.terminate) { + return; + } + if(get_key()) { + break; + } + Sleep(10); + } + Sleep(100); + for(;;) { + if(params.terminate) { + return; + } + if(!(get_key() & 0x18)) { + break; + } + Sleep(10); + } + break; case 254: RND = 0; break; @@ -1568,11 +1545,7 @@ void NACT::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 c5b39ee..4141c38 100644 --- a/src/sys/nact_sys3.cpp +++ b/src/sys/nact_sys3.cpp @@ -4,21 +4,13 @@ [ NACT - command ] */ -#if defined(_SYSTEM1) -#include "../res1/resource.h" -#elif defined(_SYSTEM2) -#include "../res2/resource.h" -#else -#include "../res3/resource.h" -#endif - #include "nact.h" #include "ags.h" #include "mako.h" #include "crc32.h" #include "../fileio.h" +#include "../res3/resource.h" -extern _TCHAR g_root[_MAX_PATH]; extern HINSTANCE g_hinst; extern HWND g_hwnd; @@ -32,11 +24,7 @@ void NACT::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::cmd_branch() @@ -48,11 +36,7 @@ void NACT::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::cmd_label_jump() @@ -60,22 +44,14 @@ void NACT::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::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) { // リターン @@ -97,22 +73,14 @@ void NACT::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::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) { // リターン @@ -139,11 +107,7 @@ void NACT::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(); @@ -154,42 +118,21 @@ void NACT::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::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); return; } - // クリック中の間は待機 - for(;;) { - if(params.terminate) { - return; - } -// if(get_key() != 32) { - if(!get_key()) { - break; - } - Sleep(10); - } - // メニュー表示 ags->open_menu_window(menu_window); - int current_index = 0; // マウス移動 int sx = ags->menu_w[menu_window - 1].sx; @@ -198,17 +141,20 @@ void NACT::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(;;) { + for(bool selectable = true;;) { // 入力待機 int val = 0, current_mx = mx, current_my = my; for(;;) { if(params.terminate) { return; } - if(val = get_key()) { + if((val = get_key()) != 0) { Sleep(100); break; } @@ -237,6 +183,9 @@ void NACT::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) { @@ -249,7 +198,8 @@ void NACT::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; @@ -280,11 +230,7 @@ void NACT::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::cmd_set_verbobj2() @@ -301,21 +247,14 @@ void NACT::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::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; // 表示する動詞のチェック @@ -344,21 +283,8 @@ void NACT::cmd_open_verb() } ags->draw_menu = false; - // クリック中の間は待機 - for(;;) { - if(params.terminate) { - return; - } -// if(get_key() != 32) { - if(!get_key()) { - break; - } - Sleep(10); - } - // メニュー表示 ags->open_menu_window(menu_window); - int current_index = 0; // マウス移動 int sx = ags->menu_w[menu_window - 1].sx; @@ -367,17 +293,20 @@ void NACT::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(;;) { + for(bool selectable = true;;) { // 入力待機 int val = 0, current_mx = mx, current_my = my; for(;;) { if(params.terminate) { return; } - if(val = get_key()) { + if((val = get_key()) != 0) { Sleep(100); break; } @@ -406,6 +335,9 @@ void NACT::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) { @@ -418,7 +350,8 @@ void NACT::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; @@ -488,21 +421,8 @@ void NACT::cmd_open_obj(int verb) ags->menu_dest_y += ags->menu_font_size + 2; ags->draw_menu = false; - // クリック中の間は待機 - for(;;) { - if(params.terminate) { - return; - } -// if(get_key() != 32) { - if(!get_key()) { - break; - } - Sleep(10); - } - // メニュー表示 ags->open_menu_window(menu_window); - int current_index = 0; // マウス移動 int sx = ags->menu_w[menu_window - 1].sx; @@ -511,17 +431,20 @@ void NACT::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(;;) { + for(bool selectable = true;;) { // 入力待機 int val = 0, current_mx = mx, current_my = my; for(;;) { if(params.terminate) { return; } - if(val = get_key()) { + if((val = get_key()) != 0) { Sleep(100); break; } @@ -550,6 +473,9 @@ void NACT::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) { @@ -562,7 +488,8 @@ void NACT::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; @@ -585,11 +512,7 @@ void NACT::cmd_open_obj(int verb) void NACT::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マークの表示 @@ -633,18 +556,13 @@ void NACT::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) { // あゆみちゃん物語 - 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; @@ -679,7 +597,7 @@ void NACT::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); @@ -699,6 +617,8 @@ void NACT::cmd_b() void NACT::cmd_d() { // 未使用 + output_console("\nUnknown Command: 'D' at page = %d, addr = %d\n", scenario_page, prev_addr); + fatal_error = true; } void NACT::cmd_e() @@ -710,11 +630,7 @@ void NACT::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; @@ -725,11 +641,7 @@ void NACT::cmd_e() void NACT::cmd_f() { -#if defined(_DEBUG_CONSOLE) - char log[128]; - sprintf_s(log, 128, "\nF"); - output_console(log); -#endif + output_console("\nF"); scenario_addr = 2; } @@ -738,11 +650,7 @@ void NACT::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); } @@ -752,11 +660,7 @@ void NACT::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) { @@ -807,15 +711,11 @@ void NACT::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; - 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); } @@ -825,11 +725,7 @@ void NACT::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; @@ -841,11 +737,7 @@ void NACT::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) { @@ -862,7 +754,7 @@ void NACT::cmd_k() if(params.terminate) { return; } - if(val = get_key()) { + if((val = get_key()) != 0) { break; } if(1 <= cmd && cmd <= 3) { @@ -918,19 +810,12 @@ void NACT::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) { // 特殊セーブ - _TCHAR file_path[_MAX_PATH]; - _stprintf_s(file_path, _MAX_PATH, _T("%sASLEEP.DAT"), g_root); - - FILEIO* fio = new FILEIO(); - if(fio->Fopen(file_path, FILEIO_READ_BINARY)) { + FILEIO *fio = new FILEIO(); + if(fio->Fopen("ASLEEP.DAT", FILEIO_READ_BINARY)) { // U01 - U20 for(int i = 21; i <= 40; i++) { var[i] = fio->Fgetw(); @@ -944,13 +829,11 @@ void NACT::cmd_l() delete fio; } else if(1 <= index && index <= 26) { // ASLEEP_A.DAT - ASLEEP_Z.DAT - _TCHAR path[_MAX_PATH], file_path[_MAX_PATH]; - _tcscpy_s(path, _MAX_PATH, _T("ASLEEP_A.DAT")); - path[7] = _T('A') + index - 1; - _stprintf_s(file_path, _MAX_PATH, _T("%s%s"), g_root, path); + char file_name[_MAX_PATH]; + sprintf_s(file_name, _MAX_PATH, "ASLEEP_%c.DAT", 'A' + index - 1); - FILEIO* fio = new FILEIO(); - if(fio->Fopen(file_path, FILEIO_READ_BINARY)) { + FILEIO *fio = new FILEIO(); + if(fio->Fopen(file_name, FILEIO_READ_BINARY)) { fio->Fseek(112, FILEIO_SEEK_SET); int next_page = fio->Fgetw() - 1; @@ -1040,13 +923,11 @@ void NACT::cmd_l() delete fio; } else if(101 <= index && index <= 126) { // ASLEEP_A.DAT - ASLEEP_Z.DAT - _TCHAR path[_MAX_PATH], file_path[_MAX_PATH]; - _tcscpy_s(path, _MAX_PATH, _T("ASLEEP_A.DAT")); - path[7] = _T('A') + index - 101; - _stprintf_s(file_path, _MAX_PATH, _T("%s%s"), g_root, path); + char file_name[_MAX_PATH]; + sprintf_s(file_name, _MAX_PATH, "ASLEEP_%c.DAT", 'A' + index - 101); - FILEIO* fio = new FILEIO(); - if(fio->Fopen(file_path, FILEIO_READ_BINARY)) { + FILEIO *fio = new FILEIO(); + if(fio->Fopen(file_name, FILEIO_READ_BINARY)) { fio->Fseek(112 + 16, FILEIO_SEEK_SET); var[0] = fio->Fgetw(); fio->Fclose(); @@ -1071,22 +952,18 @@ void NACT::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); } else if(tvar_index == 31) { - _tcscpy_s(adisk, 16, string); + strcpy_s(adisk, 16, string); } else if(tvar_index == 32) { - _tcscpy_s(ags->acg, 16, string); + strcpy_s(ags->acg, 16, string); } else if(tvar_index == 33) { - _tcscpy_s(mako->amus, 16, string); + strcpy_s(mako->amus, 16, string); } else if(tvar_index == 34) { - _tcscpy_s(mako->amse, 16, string); + strcpy_s(mako->amse, 16, string); } } @@ -1096,11 +973,7 @@ void NACT::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::cmd_o() @@ -1125,11 +998,7 @@ void NACT::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; @@ -1151,11 +1020,7 @@ void NACT::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); } } @@ -1166,11 +1031,7 @@ void NACT::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; @@ -1212,19 +1073,12 @@ void NACT::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) { // 特殊セーブ - _TCHAR file_path[_MAX_PATH]; - _stprintf_s(file_path, _MAX_PATH, _T("%sASLEEP.DAT"), g_root); - - FILEIO* fio = new FILEIO(); - if(fio->Fopen(file_path, FILEIO_WRITE_BINARY)) { + FILEIO *fio = new FILEIO(); + if(fio->Fopen("ASLEEP.DAT", FILEIO_WRITE_BINARY)) { // U01 - U20 for(int i = 21; i <= 40; i++) { fio->Fputw(var[i]); @@ -1238,13 +1092,11 @@ void NACT::cmd_q() delete fio; } else if(1 <= index && index <= 26) { // ASLEEP_A.DAT - ASLEEP_Z.DAT - _TCHAR path[_MAX_PATH], file_path[_MAX_PATH]; - _tcscpy_s(path, _MAX_PATH, _T("ASLEEP_A.DAT")); - path[7] = _T('A') + index - 1; - _stprintf_s(file_path, _MAX_PATH, _T("%s%s"), g_root, path); + char file_name[_MAX_PATH]; + sprintf_s(file_name, _MAX_PATH, "ASLEEP_%c.DAT", 'A' + index - 1); - FILEIO* fio = new FILEIO(); - if(fio->Fopen(file_path, FILEIO_WRITE_BINARY)) { + FILEIO *fio = new FILEIO(); + if(fio->Fopen(file_name, FILEIO_WRITE_BINARY)) { uint8 buffer[9510]; int p = 0; @@ -1312,11 +1164,7 @@ void NACT::cmd_q() void NACT::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)) { @@ -1328,11 +1176,7 @@ void NACT::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); @@ -1346,11 +1190,7 @@ void NACT::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; @@ -1362,13 +1202,9 @@ void NACT::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) { + if(crc32_a == CRC32_RANCE41 || crc32_a == CRC32_RANCE42) { transparent = (transparent == 28) ? 12 : transparent; } ags->load_cg(page, transparent); @@ -1379,11 +1215,7 @@ void NACT::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++) { @@ -1408,11 +1240,7 @@ void NACT::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); } @@ -1421,11 +1249,7 @@ void NACT::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]); @@ -1437,11 +1261,7 @@ void NACT::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: @@ -1736,7 +1556,7 @@ void NACT::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) { @@ -1770,14 +1590,12 @@ void NACT::cmd_y() } break; case 239: - { - _TCHAR path[_MAX_PATH], file_path[_MAX_PATH]; - _tcscpy_s(path, _MAX_PATH, _T("ASLEEP_A.DAT")); - path[7] = _T('A') + param - 1; - _stprintf_s(file_path, _MAX_PATH, _T("%s%s"), g_root, path); - - HANDLE hFile = CreateFile(file_path, GENERIC_READ, FILE_SHARE_WRITE, NULL, - OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + if(1 <= param && param <= 26) { + char file_name[_MAX_PATH]; + sprintf_s(file_name, _MAX_PATH, "ASLEEP_%c.DAT", 'A' + param - 1); + + HANDLE hFile = CreateFileA(FILEIO::GetFilePath(file_name), GENERIC_READ, FILE_SHARE_WRITE, NULL, + OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if(hFile != INVALID_HANDLE_VALUE) { FILETIME fTime, fLocalTime; SYSTEMTIME sTime; @@ -1794,6 +1612,9 @@ void NACT::cmd_y() } else { D01 = D02 = D03 = D04 = D05 = D06 = 0; } + } else { + // 不正なファイル番号 + D01 = D02 = D03 = D04 = D05 = D06 = 0; } break; case 240: @@ -1802,29 +1623,33 @@ void NACT::cmd_y() case 241: break; case 250: - { - _TCHAR path[4]; - path[0] = g_root[0]; - path[1] = _T(':'); - path[2] = _T('\\'); - path[3] = _T('\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 { + // ネットワークドライブ? + RND = 1; } break; case 251: 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; @@ -1838,11 +1663,7 @@ void NACT::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/winmain.cpp b/src/winmain.cpp index 972f5a9..af12f77 100644 --- a/src/winmain.cpp +++ b/src/winmain.cpp @@ -15,12 +15,12 @@ #include "res1/resource.h" #elif defined(_SYSTEM2) #include "res2/resource.h" -#else +#elif defined(_SYSTEM3) #include "res3/resource.h" #endif #include "sys/nact.h" -int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR szCmdLine, int iCmdShow); +int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR szCmdLine, int iCmdShow); LRESULT CALLBACK WndProc(HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam); // フルスクリーン @@ -37,23 +37,14 @@ void release_mci(); void play_mci(HWND hWnd, int index); void stop_mci(); -_TCHAR g_root[_MAX_PATH]; HINSTANCE g_hinst; HWND g_hwnd = NULL; HMENU g_hmenu = NULL; -NACT* nact; +NACT *nact; -int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR szCmdLine, int iCmdShow) +int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR szCmdLine, int iCmdShow) { - // モジュールパス取得 - GetModuleFileName(NULL, g_root, _MAX_PATH); - int p = _tcslen(g_root); - while(g_root[p] != _T('\\')) { - p--; - } - g_root[p + 1] = _T('\0'); - g_hinst = hInstance; // ウィンドウの表示位置を取得する @@ -88,7 +79,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR szCmdLin _tcscpy_s(buf, 128, _T("Scenario Decoder SYSTEM1")); #elif defined(_SYSTEM2) _tcscpy_s(buf, 128, _T("Scenario Decoder SYSTEM2")); -#else +#elif defined(_SYSTEM3) _tcscpy_s(buf, 128, _T("Scenario Decoder SYSTEM3")); #endif @@ -114,7 +105,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR szCmdLin _stprintf_s(buf, 128, _T("Scenario Decoder SYSTEM1 - %s"), title); #elif defined(_SYSTEM2) _stprintf_s(buf, 128, _T("Scenario Decoder SYSTEM2 - %s"), title); -#else +#elif defined(_SYSTEM3) _stprintf_s(buf, 128, _T("Scenario Decoder SYSTEM3 - %s"), title); #endif SetWindowText(g_hwnd, buf); @@ -140,7 +131,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR szCmdLin ChangeDisplaySettings(NULL, 0); } -#ifdef _DEBUG +#if defined(_DEBUG) // メモリリーク検出 _CrtDumpMemoryLeaks(); #endif diff --git a/dps.vcproj b/system1.vcproj similarity index 81% rename from dps.vcproj rename to system1.vcproj index c3415b7..cc94f7f 100644 --- a/dps.vcproj +++ b/system1.vcproj @@ -2,8 +2,9 @@ @@ -42,17 +43,17 @@ MkTypLibCompatible="true" SuppressStartupBanner="true" TargetEnvironment="1" - TypeLibraryName=".\Debug/dps.tlb" + TypeLibraryName=".\Debug/system1.tlb" HeaderFileName="" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sdps.vcproj b/system2.vcproj similarity index 83% rename from sdps.vcproj rename to system2.vcproj index 3001c72..ac98d87 100644 --- a/sdps.vcproj +++ b/system2.vcproj @@ -2,8 +2,9 @@ @@ -42,17 +43,17 @@ MkTypLibCompatible="true" SuppressStartupBanner="true" TargetEnvironment="1" - TypeLibraryName=".\Debug/sdps.tlb" + TypeLibraryName=".\Debug/system2.tlb" HeaderFileName="" /> + + + + + + + + + + + + + + + + + + + + + + diff --git a/system3.vcproj b/system3.vcproj index de2a4e1..553f462 100644 --- a/system3.vcproj +++ b/system3.vcproj @@ -4,6 +4,7 @@ Version="9.00" Name="system3" ProjectGUID="{13659905-B0B3-4B70-ADAA-64F6A35051B8}" + RootNamespace="system3" TargetFrameworkVersion="0" > @@ -684,6 +685,10 @@ RelativePath="src\res3\AMUS_RG2.MDA" > + + diff --git a/tengu.vcproj b/tengu.vcproj deleted file mode 100644 index 8cd8cf9..0000000 --- a/tengu.vcproj +++ /dev/null @@ -1,656 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/vampire.vcproj b/vampire.vcproj deleted file mode 100644 index 5fb9ae9..0000000 --- a/vampire.vcproj +++ /dev/null @@ -1,656 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/vista.manifest b/vista.manifest new file mode 100644 index 0000000..1019a20 --- /dev/null +++ b/vista.manifest @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + +