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 0000000..fce0edc
Binary files /dev/null and b/src/res1/AMUS_AB.MDA differ
diff --git a/src/res1/AMUS_AL1.MDA b/src/res1/AMUS_AL1.MDA
new file mode 100644
index 0000000..1355c67
Binary files /dev/null and b/src/res1/AMUS_AL1.MDA differ
diff --git a/src/res1/AMUS_AT.MDA b/src/res1/AMUS_AT.MDA
new file mode 100644
index 0000000..546a5a6
Binary files /dev/null and b/src/res1/AMUS_AT.MDA differ
diff --git a/src/res1/AMUS_CRS.MDA b/src/res1/AMUS_CRS.MDA
new file mode 100644
index 0000000..84bd891
Binary files /dev/null and b/src/res1/AMUS_CRS.MDA differ
diff --git a/src/res1/AMUS_DPS.MDA b/src/res1/AMUS_DPS.MDA
new file mode 100644
index 0000000..ee86a0b
Binary files /dev/null and b/src/res1/AMUS_DPS.MDA differ
diff --git a/src/res1/AMUS_INT.MDA b/src/res1/AMUS_INT.MDA
new file mode 100644
index 0000000..bd14d6b
Binary files /dev/null and b/src/res1/AMUS_INT.MDA differ
diff --git a/src/res1/AMUS_LP2.MDA b/src/res1/AMUS_LP2.MDA
new file mode 100644
index 0000000..7b09e7f
Binary files /dev/null and b/src/res1/AMUS_LP2.MDA differ
diff --git a/src/res1/AMUS_SG.MDA b/src/res1/AMUS_SG.MDA
new file mode 100644
index 0000000..5c7543f
Binary files /dev/null and b/src/res1/AMUS_SG.MDA differ
diff --git a/src/res1/AMUS_T1.MDA b/src/res1/AMUS_T1.MDA
new file mode 100644
index 0000000..3580720
Binary files /dev/null and b/src/res1/AMUS_T1.MDA differ
diff --git a/src/res1/AMUS_VX.MDA b/src/res1/AMUS_VX.MDA
new file mode 100644
index 0000000..6af3fd9
Binary files /dev/null and b/src/res1/AMUS_VX.MDA differ
diff --git a/src/res1/BMUS_AKA.MDA b/src/res1/BMUS_AKA.MDA
new file mode 100644
index 0000000..7b69e75
Binary files /dev/null and b/src/res1/BMUS_AKA.MDA differ
diff --git a/src/res1/BMUS_ANT.MDA b/src/res1/BMUS_ANT.MDA
new file mode 100644
index 0000000..6cce8c8
Binary files /dev/null and b/src/res1/BMUS_ANT.MDA differ
diff --git a/src/res1/BMUS_FAH.MDA b/src/res1/BMUS_FAH.MDA
new file mode 100644
index 0000000..49778c4
Binary files /dev/null and b/src/res1/BMUS_FAH.MDA differ
diff --git a/src/res1/BMUS_KAT.MDA b/src/res1/BMUS_KAT.MDA
new file mode 100644
index 0000000..2e2bce3
Binary files /dev/null and b/src/res1/BMUS_KAT.MDA differ
diff --git a/src/res1/BMUS_NAI.MDA b/src/res1/BMUS_NAI.MDA
new file mode 100644
index 0000000..82fb56a
Binary files /dev/null and b/src/res1/BMUS_NAI.MDA differ
diff --git a/src/res1/BMUS_NOB.MDA b/src/res1/BMUS_NOB.MDA
new file mode 100644
index 0000000..e19a1b9
Binary files /dev/null and b/src/res1/BMUS_NOB.MDA differ
diff --git a/src/res1/BMUS_RAB.MDA b/src/res1/BMUS_RAB.MDA
new file mode 100644
index 0000000..cdaf05b
Binary files /dev/null and b/src/res1/BMUS_RAB.MDA differ
diff --git a/src/res1/BMUS_SIN.MDA b/src/res1/BMUS_SIN.MDA
new file mode 100644
index 0000000..baa64e6
Binary files /dev/null and b/src/res1/BMUS_SIN.MDA differ
diff --git a/src/res1/BMUS_SOT.MDA b/src/res1/BMUS_SOT.MDA
new file mode 100644
index 0000000..971cf9e
Binary files /dev/null and b/src/res1/BMUS_SOT.MDA differ
diff --git a/src/res1/CMUS_T1.MDA b/src/res1/CMUS_T1.MDA
new file mode 100644
index 0000000..1d33e0c
Binary files /dev/null and b/src/res1/CMUS_T1.MDA differ
diff --git a/src/res1/Script1.rc b/src/res1/Script1.rc
index ee8edde..9807f0b 100644
--- a/src/res1/Script1.rc
+++ b/src/res1/Script1.rc
@@ -87,6 +87,32 @@ END
// remains consistent on all systems.
IDI_ICON1 ICON DISCARDABLE "icon1.ico"
+/////////////////////////////////////////////////////////////////////////////
+//
+// MDA
+//
+
+IDR_AMUS_AB MDA DISCARDABLE "AMUS_AB.MDA"
+IDR_AMUS_AL1 MDA DISCARDABLE "AMUS_AL1.MDA"
+IDR_AMUS_AT MDA DISCARDABLE "AMUS_AT.MDA"
+IDR_AMUS_CRS MDA DISCARDABLE "AMUS_CRS.MDA"
+IDR_AMUS_DPS MDA DISCARDABLE "AMUS_DPS.MDA"
+IDR_AMUS_INT MDA DISCARDABLE "AMUS_INT.MDA"
+IDR_AMUS_LP2 MDA DISCARDABLE "AMUS_LP2.MDA"
+IDR_AMUS_SG MDA DISCARDABLE "AMUS_SG.MDA"
+IDR_AMUS_T1 MDA DISCARDABLE "AMUS_T1.MDA"
+IDR_AMUS_VX MDA DISCARDABLE "AMUS_VX.MDA"
+IDR_BMUS_AKA MDA DISCARDABLE "BMUS_AKA.MDA"
+IDR_BMUS_ANT MDA DISCARDABLE "BMUS_ANT.MDA"
+IDR_BMUS_FAH MDA DISCARDABLE "BMUS_FAH.MDA"
+IDR_BMUS_KAT MDA DISCARDABLE "BMUS_KAT.MDA"
+IDR_BMUS_NAI MDA DISCARDABLE "BMUS_NAI.MDA"
+IDR_BMUS_NOB MDA DISCARDABLE "BMUS_NOB.MDA"
+IDR_BMUS_RAB MDA DISCARDABLE "BMUS_RAB.MDA"
+IDR_BMUS_SIN MDA DISCARDABLE "BMUS_SIN.MDA"
+IDR_BMUS_SOT MDA DISCARDABLE "BMUS_SOT.MDA"
+IDR_CMUS_T1 MDA DISCARDABLE "CMUS_T1.MDA"
+
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
diff --git a/src/res1/resource.h b/src/res1/resource.h
index a3c33a3..9ce237a 100644
--- a/src/res1/resource.h
+++ b/src/res1/resource.h
@@ -7,6 +7,26 @@
#define IDD_DIALOG1 103
#define IDC_TEXT 104
#define IDC_EDITBOX 105
+#define IDR_AMUS_AB 106
+#define IDR_AMUS_AL1 107
+#define IDR_AMUS_AT 108
+#define IDR_AMUS_CRS 109
+#define IDR_AMUS_DPS 110
+#define IDR_AMUS_INT 111
+#define IDR_AMUS_LP2 112
+#define IDR_AMUS_SG 113
+#define IDR_AMUS_T1 114
+#define IDR_AMUS_VX 115
+#define IDR_BMUS_AKA 116
+#define IDR_BMUS_ANT 117
+#define IDR_BMUS_FAH 118
+#define IDR_BMUS_KAT 119
+#define IDR_BMUS_NAI 120
+#define IDR_BMUS_NOB 121
+#define IDR_BMUS_RAB 122
+#define IDR_BMUS_SIN 123
+#define IDR_BMUS_SOT 124
+#define IDR_CMUS_T1 125
#define ID_RESTART 40001
#define ID_EXIT 40002
#define ID_SCREEN_WINDOW 40003
@@ -20,7 +40,7 @@
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
-#define _APS_NEXT_RESOURCE_VALUE 118
+#define _APS_NEXT_RESOURCE_VALUE 126
#define _APS_NEXT_COMMAND_VALUE 40009
#define _APS_NEXT_CONTROL_VALUE 1000
#define _APS_NEXT_SYMED_VALUE 101
diff --git a/src/res2/AMUS_AL2.MDA b/src/res2/AMUS_AL2.MDA
new file mode 100644
index 0000000..45a0dd1
Binary files /dev/null and b/src/res2/AMUS_AL2.MDA differ
diff --git a/src/res2/AMUS_AYM.MDA b/src/res2/AMUS_AYM.MDA
new file mode 100644
index 0000000..eb0ab3c
Binary files /dev/null and b/src/res2/AMUS_AYM.MDA differ
diff --git a/src/res2/AMUS_DLK.MDA b/src/res2/AMUS_DLK.MDA
new file mode 100644
index 0000000..b72c427
Binary files /dev/null and b/src/res2/AMUS_DLK.MDA differ
diff --git a/src/res2/AMUS_DRS.MDA b/src/res2/AMUS_DRS.MDA
new file mode 100644
index 0000000..c963711
Binary files /dev/null and b/src/res2/AMUS_DRS.MDA differ
diff --git a/src/res2/AMUS_PSG.MDA b/src/res2/AMUS_PSG.MDA
new file mode 100644
index 0000000..aaece60
Binary files /dev/null and b/src/res2/AMUS_PSG.MDA differ
diff --git a/src/res2/AMUS_R3H.MDA b/src/res2/AMUS_R3H.MDA
new file mode 100644
index 0000000..5b68f52
Binary files /dev/null and b/src/res2/AMUS_R3H.MDA differ
diff --git a/src/res2/AMUS_R4.MDA b/src/res2/AMUS_R4.MDA
new file mode 100644
index 0000000..ff0109b
Binary files /dev/null and b/src/res2/AMUS_R4.MDA differ
diff --git a/src/res2/AMUS_SDP.MDA b/src/res2/AMUS_SDP.MDA
new file mode 100644
index 0000000..6931ce1
Binary files /dev/null and b/src/res2/AMUS_SDP.MDA differ
diff --git a/src/res2/BMUS_KAM.MDA b/src/res2/BMUS_KAM.MDA
new file mode 100644
index 0000000..ef1e1fa
Binary files /dev/null and b/src/res2/BMUS_KAM.MDA differ
diff --git a/src/res2/BMUS_MTK.MDA b/src/res2/BMUS_MTK.MDA
new file mode 100644
index 0000000..aa56d12
Binary files /dev/null and b/src/res2/BMUS_MTK.MDA differ
diff --git a/src/res2/BMUS_TNM.MDA b/src/res2/BMUS_TNM.MDA
new file mode 100644
index 0000000..5505e3b
Binary files /dev/null and b/src/res2/BMUS_TNM.MDA differ
diff --git a/src/res2/Script1.rc b/src/res2/Script1.rc
index ee8edde..d567bf8 100644
--- a/src/res2/Script1.rc
+++ b/src/res2/Script1.rc
@@ -87,6 +87,22 @@ END
// remains consistent on all systems.
IDI_ICON1 ICON DISCARDABLE "icon1.ico"
+/////////////////////////////////////////////////////////////////////////////
+//
+// MDA
+//
+
+IDR_AMUS_AL2 MDA DISCARDABLE "AMUS_AL2.MDA"
+IDR_AMUS_AYM MDA DISCARDABLE "AMUS_AYM.MDA"
+IDR_AMUS_DLK MDA DISCARDABLE "AMUS_DLK.MDA"
+IDR_AMUS_DRS MDA DISCARDABLE "AMUS_DRS.MDA"
+IDR_AMUS_PSG MDA DISCARDABLE "AMUS_PSG.MDA"
+IDR_AMUS_R3H MDA DISCARDABLE "AMUS_R3H.MDA"
+IDR_AMUS_SDP MDA DISCARDABLE "AMUS_SDP.MDA"
+IDR_BMUS_KAM MDA DISCARDABLE "BMUS_KAM.MDA"
+IDR_BMUS_MTK MDA DISCARDABLE "BMUS_MTK.MDA"
+IDR_BMUS_TNM MDA DISCARDABLE "BMUS_TNM.MDA"
+
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
diff --git a/src/res2/resource.h b/src/res2/resource.h
index a3c33a3..8d46202 100644
--- a/src/res2/resource.h
+++ b/src/res2/resource.h
@@ -7,6 +7,16 @@
#define IDD_DIALOG1 103
#define IDC_TEXT 104
#define IDC_EDITBOX 105
+#define IDR_AMUS_AL2 106
+#define IDR_AMUS_AYM 107
+#define IDR_AMUS_DLK 108
+#define IDR_AMUS_DRS 109
+#define IDR_AMUS_PSG 110
+#define IDR_AMUS_R3H 111
+#define IDR_AMUS_SDP 112
+#define IDR_BMUS_KAM 113
+#define IDR_BMUS_MTK 114
+#define IDR_BMUS_TNM 115
#define ID_RESTART 40001
#define ID_EXIT 40002
#define ID_SCREEN_WINDOW 40003
@@ -20,7 +30,7 @@
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
-#define _APS_NEXT_RESOURCE_VALUE 118
+#define _APS_NEXT_RESOURCE_VALUE 116
#define _APS_NEXT_COMMAND_VALUE 40009
#define _APS_NEXT_CONTROL_VALUE 1000
#define _APS_NEXT_SYMED_VALUE 101
diff --git a/src/res3/AMUS_T2.MDA b/src/res3/AMUS_T2.MDA
new file mode 100644
index 0000000..51a36a4
Binary files /dev/null and b/src/res3/AMUS_T2.MDA differ
diff --git a/src/res3/Script1.rc b/src/res3/Script1.rc
index bb3d9d0..f241caa 100644
--- a/src/res3/Script1.rc
+++ b/src/res3/Script1.rc
@@ -92,18 +92,19 @@ IDI_ICON1 ICON DISCARDABLE "icon1.ico"
// MDA
//
-IDR_AL3 MDA DISCARDABLE "AMUS_AL3.MDA"
-IDR_ALL MDA DISCARDABLE "AMUS_ALL.MDA"
-IDR_AMB MDA DISCARDABLE "AMUS_AMB.MDA"
-IDR_AYM MDA DISCARDABLE "AMUS_AYM.MDA"
-IDR_BEE MDA DISCARDABLE "AMUS_BEE.MDA"
-IDR_MGN MDA DISCARDABLE "AMUS_MGN.MDA"
-IDR_OTM MDA DISCARDABLE "AMUS_OTM.MDA"
-IDR_OY MDA DISCARDABLE "AMUS_OY.MDA"
-IDR_PSG MDA DISCARDABLE "AMUS_PSG.MDA"
-IDR_R41 MDA DISCARDABLE "AMUS_R41.MDA"
-IDR_R42 MDA DISCARDABLE "AMUS_R42.MDA"
-IDR_RG2 MDA DISCARDABLE "AMUS_RG2.MDA"
+IDR_AMUS_AL3 MDA DISCARDABLE "AMUS_AL3.MDA"
+IDR_AMUS_ALL MDA DISCARDABLE "AMUS_ALL.MDA"
+IDR_AMUS_AMB MDA DISCARDABLE "AMUS_AMB.MDA"
+IDR_AMUS_AYM MDA DISCARDABLE "AMUS_AYM.MDA"
+IDR_AMUS_BEE MDA DISCARDABLE "AMUS_BEE.MDA"
+IDR_AMUS_MGN MDA DISCARDABLE "AMUS_MGN.MDA"
+IDR_AMUS_OTM MDA DISCARDABLE "AMUS_OTM.MDA"
+IDR_AMUS_OY MDA DISCARDABLE "AMUS_OY.MDA"
+IDR_AMUS_PSG MDA DISCARDABLE "AMUS_PSG.MDA"
+IDR_AMUS_R41 MDA DISCARDABLE "AMUS_R41.MDA"
+IDR_AMUS_R42 MDA DISCARDABLE "AMUS_R42.MDA"
+IDR_AMUS_RG2 MDA DISCARDABLE "AMUS_RG2.MDA"
+IDR_AMUS_T2 MDA DISCARDABLE "AMUS_T2.MDA"
/////////////////////////////////////////////////////////////////////////////
//
diff --git a/src/res3/resource.h b/src/res3/resource.h
index f5666c2..0a9caa2 100644
--- a/src/res3/resource.h
+++ b/src/res3/resource.h
@@ -7,18 +7,19 @@
#define IDD_DIALOG1 103
#define IDC_TEXT 104
#define IDC_EDITBOX 105
-#define IDR_AL3 106
-#define IDR_ALL 107
-#define IDR_AMB 108
-#define IDR_AYM 109
-#define IDR_BEE 110
-#define IDR_MGN 111
-#define IDR_OTM 112
-#define IDR_OY 113
-#define IDR_PSG 114
-#define IDR_R41 115
-#define IDR_R42 116
-#define IDR_RG2 117
+#define IDR_AMUS_AL3 106
+#define IDR_AMUS_ALL 107
+#define IDR_AMUS_AMB 108
+#define IDR_AMUS_AYM 109
+#define IDR_AMUS_BEE 110
+#define IDR_AMUS_MGN 111
+#define IDR_AMUS_OTM 112
+#define IDR_AMUS_OY 113
+#define IDR_AMUS_PSG 114
+#define IDR_AMUS_R41 115
+#define IDR_AMUS_R42 116
+#define IDR_AMUS_RG2 117
+#define IDR_AMUS_T2 118
#define ID_RESTART 40001
#define ID_EXIT 40002
#define ID_SCREEN_WINDOW 40003
@@ -32,7 +33,7 @@
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
-#define _APS_NEXT_RESOURCE_VALUE 118
+#define _APS_NEXT_RESOURCE_VALUE 119
#define _APS_NEXT_COMMAND_VALUE 40009
#define _APS_NEXT_CONTROL_VALUE 1000
#define _APS_NEXT_SYMED_VALUE 101
diff --git a/src/rest2/AMUS_AL3.MDA b/src/rest2/AMUS_AL3.MDA
deleted file mode 100644
index c0ed11d..0000000
Binary files a/src/rest2/AMUS_AL3.MDA and /dev/null differ
diff --git a/src/rest2/AMUS_KNG.MDA b/src/rest2/AMUS_KNG.MDA
new file mode 100644
index 0000000..91a71b0
Binary files /dev/null and b/src/rest2/AMUS_KNG.MDA differ
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 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+