mirror of
https://github.com/kichikuou/system3-sdl2.git
synced 2026-10-08 06:48:05 +03:00
Merge pull request #3 from kichikuou/merge-upstream
This merges changes in System3 for Win32 between 2016-01-16 and 2020-03-21.
This commit is contained in:
@@ -74,17 +74,35 @@ Since System1-3 behave slightly differently depending on the game, `system3` use
|
||||
Here's the list of available game IDs and corresponding titles:
|
||||
| game_id | Title |
|
||||
----------|--------
|
||||
| `bunkasai` | あぶない文化祭前夜 |
|
||||
| `crescent` | クレセントムーンがぁる |
|
||||
| `dps` | D.P.S - Dream Program System |
|
||||
| `dps_sg_fahren` | D.P.S SG - Fahren Fliegen |
|
||||
| `dps_sg_katei` | D.P.S SG - 家庭教師はステキなお仕事 |
|
||||
| `dps_sg_nobunaga` | D.P.S SG - 信長の淫謀 |
|
||||
| `dps_sg2_antique` | D.P.S SG set2 - ANTIQUE HOUSE |
|
||||
| `dps_sg2_ikenai` | D.P.S SG set2 - いけない内科検診再び |
|
||||
| `dps_sg2_akai` | D.P.S SG set2 - 朱い夜 |
|
||||
| `dps_sg3_rabbit` | D.P.S SG set3 - Rabbit P4P |
|
||||
| `dps_sg3_shinkon` | D.P.S SG set3 - しんこんさんものがたり |
|
||||
| `dps_sg3_sotsugyou` | D.P.S SG set3 - 卒業 |
|
||||
| `fukei` | 婦警さんVX |
|
||||
| `intruder` | Intruder -桜屋敷の探索- |
|
||||
| `tengu` | あぶないてんぐ伝説 |
|
||||
| `toushin_hint` | 闘神都市 ヒントディスク |
|
||||
| `little_vampire` | Little Vampire |
|
||||
| `yakata` | ALICEの館 |
|
||||
| `ayumi_fd` | あゆみちゃん物語 |
|
||||
| `ayumi_hint` | あゆみちゃん物語 ヒントディスク |
|
||||
| `ayumi_proto` | あゆみちゃん物語 PROTO |
|
||||
| `sdps_maria` | Super D.P.S マリアとカンパン |
|
||||
| `sdps_tono` | Super D.P.S 遠野の森 |
|
||||
| `sdps_kaizoku` | Super D.P.S 海賊家業 |
|
||||
| `dalk_hint` | DALK ヒントディスク |
|
||||
| `drstop` | Dr. STOP! |
|
||||
| `prog_fd` | Prostudent G (FD) |
|
||||
| `rance3_hint` | Rance3 ヒントディスク |
|
||||
| `sdps_maria` | Super D.P.S - マリアとカンパン |
|
||||
| `sdps_tono` | Super D.P.S - 遠野の森 |
|
||||
| `sdps_kaizoku` | Super D.P.S - うれしたのし海賊稼業 |
|
||||
| `yakata2` | ALICEの館II |
|
||||
| `ambivalenz_fd` | AmbivalenZ −二律背反− (FD) |
|
||||
| `ambivalenz_cd` | AmbivalenZ −二律背反− (CD) |
|
||||
| `dps_all` | D.P.S. 全部 |
|
||||
@@ -102,6 +120,7 @@ Here's the list of available game IDs and corresponding titles:
|
||||
| `yakata3_cd` | アリスの館3 (CD) |
|
||||
| `yakata3_fd` | アリスの館3 (FD) |
|
||||
| `hashirionna2` | 走り女2 |
|
||||
| `toushin2_gd` |闘神都市2 グラフィックディスク |
|
||||
| `toushin2_sp` | 闘神都市2 そして、それから… |
|
||||
| `otome` | 乙女戦記 |
|
||||
| `ningyo` | 人魚 -蘿子- |
|
||||
|
||||
+33
-1
@@ -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版)をサポートしました。
|
||||
あゆみちゃん物語 ヒントディスクをサポートしました。
|
||||
|
||||
+3
-9
@@ -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版や、
|
||||
|
||||
+9
-5
@@ -40,13 +40,13 @@ FILEIO::~FILEIO(void)
|
||||
}
|
||||
}
|
||||
|
||||
bool FILEIO::Fopen(const char *filename, int mode)
|
||||
bool FILEIO::Fopen(const char *file_name, int mode)
|
||||
{
|
||||
mode_ = mode;
|
||||
char path[_MAX_PATH];
|
||||
sprintf_s(path, _MAX_PATH, "%s%s",
|
||||
(g_savedir && mode & FILEIO_SAVEDATA) ? g_savedir : g_root,
|
||||
filename);
|
||||
file_name);
|
||||
|
||||
mode &= ~FILEIO_SAVEDATA;
|
||||
|
||||
@@ -115,7 +115,7 @@ int FILEIO::Fgetw()
|
||||
return val | (Fgetc() << 8);
|
||||
}
|
||||
|
||||
void FILEIO::Fgets(char dest[])
|
||||
void FILEIO::Fgets(char *dest, int length)
|
||||
{
|
||||
int p = 0;
|
||||
|
||||
@@ -125,9 +125,13 @@ void FILEIO::Fgets(char dest[])
|
||||
break;
|
||||
}
|
||||
if(c != 0x0a) {
|
||||
dest[p++] = c;
|
||||
if(p < length + 1) {
|
||||
dest[p++] = c;
|
||||
}
|
||||
if((0x81 <= c && c <= 0x9f) || 0xe0 <= c) {
|
||||
dest[p++] = Fgetc();
|
||||
if(p < length + 1) {
|
||||
dest[p++] = Fgetc();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -30,7 +30,7 @@ public:
|
||||
|
||||
static void SetSaveDir(const char* savedir);
|
||||
static int StatSavedata(const char* filename, struct stat* buf);
|
||||
bool Fopen(const char *filename, int mode);
|
||||
bool Fopen(const char *file_name, int mode);
|
||||
void Fclose();
|
||||
uint32 Fseek(long offset, int origin);
|
||||
uint32 Ftell();
|
||||
@@ -38,7 +38,7 @@ public:
|
||||
uint32 Fwrite(void* buffer, uint32 size, uint32 count);
|
||||
int Fgetc();
|
||||
int Fgetw();
|
||||
void Fgets(char dest[]);
|
||||
void Fgets(char* dest, int length);
|
||||
void Fputc(int c);
|
||||
void Fputw(int w);
|
||||
};
|
||||
|
||||
@@ -35,9 +35,13 @@ void NACT::release_console()
|
||||
{
|
||||
}
|
||||
|
||||
void NACT::output_console(char log[])
|
||||
void NACT::output_console(const char *format, ...)
|
||||
{
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
fputs(log, stderr);
|
||||
va_list ap;
|
||||
|
||||
va_start(ap, format);
|
||||
vfprintf(stdout, format, ap);
|
||||
va_end(ap);
|
||||
#endif
|
||||
}
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+26
-4
@@ -169,7 +169,7 @@ AGS::AGS(NACT* parent, const char* fontfile) : nact(parent)
|
||||
// Bコマンド
|
||||
for(int i = 0; i < 10; i++) {
|
||||
// ウィンドウの初期位置はシステムによって異なる
|
||||
switch (nact->crc32) {
|
||||
switch (nact->crc32_a) {
|
||||
case CRC32_BUNKASAI:
|
||||
SET_TEXT(i, 24, 304, 616, 384, false);
|
||||
SET_MENU(i, 440, 18, 620, 178, true);
|
||||
@@ -180,6 +180,9 @@ AGS::AGS(NACT* parent, const char* fontfile) : nact(parent)
|
||||
SET_MENU(i, 464, 50, 623, 240, true);
|
||||
break;
|
||||
case CRC32_DPS:
|
||||
case CRC32_DPS_SG:
|
||||
//case CRC32_DPS_SG2:
|
||||
case CRC32_DPS_SG3:
|
||||
SET_TEXT(i, 48, 288, 594, 393, false);
|
||||
//SET_MENU(i, 48, 288, 584, 393, false);
|
||||
SET_MENU(i, 48, 288, 594, 393, false);
|
||||
@@ -196,10 +199,30 @@ AGS::AGS(NACT* parent, const char* fontfile) : nact(parent)
|
||||
SET_TEXT(i, 44, 282, 593, 396, false);
|
||||
SET_MENU(i, 452, 14, 627, 214, false);
|
||||
break;
|
||||
case CRC32_TOUSHIN_HINT:
|
||||
SET_TEXT(i, 8, 311, 623, 391, false);
|
||||
SET_MENU(i, 452, 14, 627, 214, true);
|
||||
break;
|
||||
case CRC32_VAMPIRE:
|
||||
SET_TEXT(i, 8, 255, 615, 383, false);
|
||||
SET_MENU(i, 448, 11, 615, 224, false);
|
||||
break;
|
||||
case CRC32_YAKATA:
|
||||
SET_TEXT(i, 48, 288, 594, 393, false);
|
||||
SET_MENU(i, 452, 14, 627, 214, false);
|
||||
break;
|
||||
case CRC32_DALK_HINT:
|
||||
SET_TEXT(i, 24, 308, 376, 386, false);
|
||||
SET_MENU(i, 404, 28, 604, 244, true);
|
||||
break;
|
||||
case CRC32_RANCE3_HINT:
|
||||
SET_TEXT(i, 104, 304, 615, 383, false);
|
||||
SET_MENU(i, 464, 24, 623, 200, true);
|
||||
break;
|
||||
case CRC32_YAKATA2:
|
||||
SET_TEXT(i, 104, 304, 620, 382, false);
|
||||
SET_MENU(i, 420, 28, 620, 244, true);
|
||||
break;
|
||||
default:
|
||||
SET_TEXT(i, 8, 311, 623, 391, true);
|
||||
SET_MENU(i, 464, 80, 623, 240, true);
|
||||
@@ -211,7 +234,6 @@ AGS::AGS(NACT* parent, const char* fontfile) : nact(parent)
|
||||
menu_w[i].push = true;
|
||||
menu_w[i].screen = NULL;
|
||||
menu_w[i].window = NULL;
|
||||
|
||||
}
|
||||
|
||||
// Eコマンド
|
||||
@@ -220,9 +242,9 @@ AGS::AGS(NACT* parent, const char* fontfile) : nact(parent)
|
||||
SET_BOX(i, 0, 0, 0, 639, 399);
|
||||
}
|
||||
if (nact->sys_ver == 2) {
|
||||
if (nact->crc32 == CRC32_SDPS_TONO || nact->crc32 == CRC32_SDPS_KAIZOKU) {
|
||||
if(nact->crc32_a == CRC32_SDPS && (nact->crc32_b == CRC32_SDPS_TONO || nact->crc32_b == CRC32_SDPS_KAIZOKU)) {
|
||||
SET_BOX(0, 0, 40, 8, 598, 271);
|
||||
} else if (nact->crc32 == CRC32_PROSTUDENTG_FD) {
|
||||
} else if(nact->crc32_a == CRC32_PROSTUDENTG_FD) {
|
||||
SET_BOX(0, 0, 64, 13, 407, 289);
|
||||
SET_BOX(1, 0, 24, 298, 111, 390);
|
||||
SET_BOX(2, 0, 0, 0, 639, 307);
|
||||
|
||||
+6
-6
@@ -59,18 +59,16 @@ private:
|
||||
SDL_Cursor* hCursor[10];
|
||||
|
||||
// AGS
|
||||
void load_gm3(uint8* data, int page, int transparent); // Intruder -桜屋敷の探索-
|
||||
void load_vsp2l(uint8* data, int page, int transparent); // Little Vampire
|
||||
void load_gl3(uint8* data, int page, int transparent); // あぶない天狗伝説
|
||||
void load_gm3(uint8* data, int page, int transparent); // Intruder
|
||||
void load_vsp(uint8* data, int page, int transparent);
|
||||
void load_gl3(uint8* data, int page, int transparent);
|
||||
void load_pms(uint8* data, int page, int transparent);
|
||||
void load_bmp(const char *file_path);
|
||||
void load_bmp(const char* file_name); // あゆみちゃん物語 フルカラー実写版
|
||||
void load_vsp(uint8* data, int page, int transparent);
|
||||
|
||||
void draw_char(int dest, int dest_x, int dest_y, uint16 code, int size, uint8 color);
|
||||
void draw_char_antialias(int dest, int dest_x, int dest_y, uint16 code, int size, uint8 color, uint8 cache[]);
|
||||
void draw_gaiji(int dest, int dest_x, int dest_y, uint16 code, int size, uint8 color);
|
||||
uint16 convert_zenkaku(uint16 code);
|
||||
uint16 convert_hankaku(uint16 code);
|
||||
|
||||
void draw_window(int sx, int sy, int ex, int ey, bool frame, uint8 frame_color, uint8 back_color);
|
||||
|
||||
@@ -118,6 +116,8 @@ public:
|
||||
void box_line(int dest, int sx, int sy, int ex, int ey, uint8 color);
|
||||
|
||||
void draw_text(const char* string);
|
||||
uint16 convert_zenkaku(uint16 code);
|
||||
uint16 convert_hankaku(uint16 code);
|
||||
|
||||
void clear_text_window(int index, bool erase);
|
||||
bool return_text_line(int index);
|
||||
|
||||
+3
-2
@@ -5,8 +5,9 @@
|
||||
*/
|
||||
|
||||
#include "ags.h"
|
||||
#include "../fileio.h"
|
||||
|
||||
void AGS::load_bmp(const char *file_path)
|
||||
void AGS::load_bmp(const char* file_name)
|
||||
{
|
||||
// ヘッダ取得
|
||||
int sx = 0, sy = 0;
|
||||
@@ -23,7 +24,7 @@ void AGS::load_bmp(const char *file_path)
|
||||
#if 0
|
||||
// BMP読み込み
|
||||
WCHAR wszFilePath[_MAX_PATH];
|
||||
MultiByteToWideChar(CP_ACP, 0, file_path, -1, wszFilePath, _MAX_PATH);
|
||||
MultiByteToWideChar(CP_ACP, 0, FILEIO::GetFilePath(file_name), -1, wszFilePath, _MAX_PATH);
|
||||
Gdiplus::Bitmap *pBitmap = Gdiplus::Bitmap::FromFile(wszFilePath);
|
||||
for(unsigned int y = 0; y < pBitmap->GetHeight(); y++) {
|
||||
for(unsigned int x = 0; x < pBitmap->GetWidth(); x++) {
|
||||
|
||||
+12
-11
@@ -8,21 +8,19 @@
|
||||
#include "dri.h"
|
||||
#include "crc32.h"
|
||||
|
||||
extern char g_root[_MAX_PATH];
|
||||
|
||||
void AGS::load_cg(int page, int transparent)
|
||||
{
|
||||
if (nact->sys_ver == 3) {
|
||||
// あゆみちゃん物語 フルカラー実写版
|
||||
if(strncmp(acg, "CGA000.BMP", 10) == 0) {
|
||||
char file_path[_MAX_PATH];
|
||||
sprintf_s(file_path, _MAX_PATH, "%sCGA%03d.BMP", g_root, page);
|
||||
load_bmp(file_path);
|
||||
char file_name[_MAX_PATH];
|
||||
sprintf_s(file_name, _MAX_PATH, "CGA%03d.BMP", page);
|
||||
load_bmp(file_name);
|
||||
return;
|
||||
} else if(strncmp(acg, "CGB000.BMP", 10) == 0) {
|
||||
char file_path[_MAX_PATH];
|
||||
sprintf_s(file_path, _MAX_PATH, "%sCGB%03d.BMP", g_root, page);
|
||||
load_bmp(file_path);
|
||||
char file_name[_MAX_PATH];
|
||||
sprintf_s(file_name, _MAX_PATH, "CGB%03d.BMP", page);
|
||||
load_bmp(file_name);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -32,7 +30,7 @@ void AGS::load_cg(int page, int transparent)
|
||||
if(data && size > 0) {
|
||||
switch (nact->sys_ver) {
|
||||
case 1:
|
||||
switch (nact->crc32) {
|
||||
switch (nact->crc32_a) {
|
||||
case CRC32_BUNKASAI:
|
||||
load_vsp(data, page, transparent);
|
||||
break;
|
||||
@@ -49,10 +47,13 @@ void AGS::load_cg(int page, int transparent)
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if(nact->crc32 == CRC32_AYUMI_PROTO) {
|
||||
if(nact->crc32_a == CRC32_AYUMI_PROTO) {
|
||||
// あゆみちゃん物語 PROTO
|
||||
load_gl3(data, page, transparent);
|
||||
} else if(nact->crc32 == CRC32_SDPS_MARIA || nact->crc32 == CRC32_SDPS_TONO || nact->crc32 == CRC32_SDPS_KAIZOKU) {
|
||||
} else if(nact->crc32_a == CRC32_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 {
|
||||
|
||||
+5
-5
@@ -40,7 +40,7 @@ void AGS::load_pms(uint8* data, int page, int transparent)
|
||||
tmp_palette[i * 16 + j] = SETPALETTE256(r, g, b);
|
||||
}
|
||||
}
|
||||
if(nact->crc32 == CRC32_RANCE41 || nact->crc32 == CRC32_RANCE42 || nact->crc32 == CRC32_HASHIRIONNA2) {
|
||||
if(nact->crc32_a == CRC32_RANCE41 || nact->crc32_a == CRC32_RANCE42 || nact->crc32_a == CRC32_HASHIRIONNA2) {
|
||||
// 上下16色は取得しない
|
||||
for(int i = 1; i < 15; i++) {
|
||||
for(int j = 0; j < 16; j++) {
|
||||
@@ -49,7 +49,7 @@ void AGS::load_pms(uint8* data, int page, int transparent)
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if(nact->crc32 == CRC32_MUGENHOUYOU && transparent != -1) {
|
||||
} else if(nact->crc32_a == CRC32_MUGENHOUYOU && transparent != -1) {
|
||||
// Uコマンドでは上下32色は取得しない
|
||||
for(int i = 2; i < 14; i++) {
|
||||
for(int j = 0; j < 16; j++) {
|
||||
@@ -71,8 +71,8 @@ void AGS::load_pms(uint8* data, int page, int transparent)
|
||||
|
||||
// パレット展開
|
||||
if (nact->sys_ver == 3) {
|
||||
if((extract_palette && extract_palette_cg[page]) || nact->crc32 == CRC32_FUNNYBEE_CD) {
|
||||
if(nact->crc32 == CRC32_RANCE41 || nact->crc32 == CRC32_RANCE42 || nact->crc32 == CRC32_HASHIRIONNA2) {
|
||||
if((extract_palette && extract_palette_cg[page]) || nact->crc32_a == CRC32_FUNNYBEE_CD) {
|
||||
if(nact->crc32_a == CRC32_RANCE41 || nact->crc32_a == CRC32_RANCE42 || nact->crc32_a == CRC32_HASHIRIONNA2) {
|
||||
// 上下16色は展開しない
|
||||
for(int i = 1; i < 15; i++) {
|
||||
for(int j = 0; j < 16; j++) {
|
||||
@@ -81,7 +81,7 @@ void AGS::load_pms(uint8* data, int page, int transparent)
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if(nact->crc32 == CRC32_MUGENHOUYOU && transparent != -1) {
|
||||
} else if(nact->crc32_a == CRC32_MUGENHOUYOU && transparent != -1) {
|
||||
// Uコマンドでは上下32色は展開しない
|
||||
for(int i = 2; i < 14; i++) {
|
||||
for(int j = 0; j < 16; j++) {
|
||||
|
||||
+3
-3
@@ -28,7 +28,7 @@ void AGS::load_vsp(uint8* data, int page, int transparent)
|
||||
}
|
||||
|
||||
// Zコマンドの処理
|
||||
if(nact->crc32 == CRC32_AMBIVALENZ_FD || nact->crc32 == CRC32_AMBIVALENZ_CD) {
|
||||
if(nact->crc32_a == CRC32_AMBIVALENZ_FD || nact->crc32_a == CRC32_AMBIVALENZ_CD) {
|
||||
// Z 0,numを無視する
|
||||
} else {
|
||||
if(palette_bank != -1) {
|
||||
@@ -37,7 +37,7 @@ void AGS::load_vsp(uint8* data, int page, int transparent)
|
||||
}
|
||||
|
||||
// パレット取得
|
||||
if(get_palette) {
|
||||
if(get_palette && transparent != 101) {
|
||||
int p = 0x0a;
|
||||
for(int i = 0; i < 16; i++) {
|
||||
uint32 b = data[p++] & 0xf;
|
||||
@@ -48,7 +48,7 @@ void AGS::load_vsp(uint8* data, int page, int transparent)
|
||||
}
|
||||
|
||||
// パレット展開
|
||||
if(nact->crc32 == CRC32_FUNNYBEE_FD || nact->crc32 == CRC32_FUNNYBEE_CD || nact->crc32 == CRC32_FUNNYBEE_PATCH) {
|
||||
if(nact->crc32_a == CRC32_FUNNYBEE_FD || nact->crc32_a == CRC32_FUNNYBEE_CD || nact->crc32_a == CRC32_FUNNYBEE_PATCH) {
|
||||
if(extract_palette_cg[page]) {
|
||||
for(int i = 0; i < 16; i++) {
|
||||
screen_palette[base + i] = program_palette[base + i];
|
||||
|
||||
+36
-10
@@ -8,21 +8,46 @@
|
||||
#define _CRC32_H_
|
||||
|
||||
// ADISK.DATの先頭256bytes
|
||||
// SYSTEM1
|
||||
|
||||
#define CRC32_CRESCENT 0x42351f2c // クレセントムーンがぁる
|
||||
#define CRC32_BUNKASAI 0xc80f99b8 // あぶない文化祭前夜
|
||||
#define CRC32_CRESCENT 0x42351f2c // クレセントムーンがぁる
|
||||
#define CRC32_DPS 0x69ea4865 // D.P.S. - Dream Program System
|
||||
#define CRC32_FUKEI 0x026de326 // 婦警さんVX (ALICEの館3 UNITBASE/Y_SYUREN.LZH)
|
||||
#define CRC32_INTRUDER 0xa7520fb2 // Intruder -桜屋敷の探索-
|
||||
#define CRC32_DPS_SG 0xab4cda48 // D.P.S. SG
|
||||
#define CRC32_DPS_SG_FAHREN 0xe405d57c // D.P.S. SG - Fahren Fliegen
|
||||
#define CRC32_DPS_SG_KATEI 0x23e67d18 // D.P.S. SG - 家庭教師はステキなお仕事
|
||||
#define CRC32_DPS_SG_NOBUNAGA 0x2ec116f2 // D.P.S. SG - 信長の淫謀
|
||||
#define CRC32_DPS_SG2 0xab4cda48 // D.P.S. SG set2
|
||||
#define CRC32_DPS_SG2_ANTIQUE 0x41fe8b3d // D.P.S. SG set2 - ANTIQUE HOUSE
|
||||
#define CRC32_DPS_SG2_IKENAI 0x6b562c09 // D.P.S. SG set2 - いけない内科検診再び
|
||||
#define CRC32_DPS_SG2_AKAI 0x1098e78c // D.P.S. SG set2 - 朱い夜
|
||||
#define CRC32_DPS_SG3 0xb77ae133 // D.P.S. SG SG set3
|
||||
#define CRC32_DPS_SG3_RABBIT 0xa3228b6c // D.P.S. SG set3 - Rabbit P4P
|
||||
#define CRC32_DPS_SG3_SHINKON 0x09b4448a // D.P.S. SG set3 - しんこんさんものがたり
|
||||
#define CRC32_DPS_SG3_SOTSUGYOU 0xbc4525d8 // D.P.S. SG set3 - 卒業
|
||||
#define CRC32_FUKEI 0x026de326 // 婦警さんVX
|
||||
#define CRC32_INTRUDER 0xa7520fb2 // Intruder -桜屋敷の探索-
|
||||
#define CRC32_TENGU 0xc942ff58 // あぶないてんぐ伝説
|
||||
#define CRC32_VAMPIRE 0x957bcfbf // Little Vampire
|
||||
#define CRC32_BUNKASAI 0 // あぶない文化祭前夜? (未確認)
|
||||
#define CRC32_TOUSHIN_HINT 0xac337537 // 闘神都市 ヒントディスク
|
||||
#define CRC32_VAMPIRE 0x957bcfbf // Little Vampire
|
||||
#define CRC32_YAKATA 0x8cef6fa6 // ALICEの館
|
||||
|
||||
// SYSTEM2
|
||||
|
||||
#define CRC32_AYUMI_FD 0x4e2fed2a // あゆみちゃん物語 (FD)
|
||||
#define CRC32_AYUMI_HINT 0xf6bd963a // あゆみちゃん物語 ヒントディスク
|
||||
#define CRC32_AYUMI_PROTO 0x4e2f5678 // あゆみちゃん物語 PROTO
|
||||
#define CRC32_SDPS 0xc7a20cdf // Super D.P.S
|
||||
#define CRC32_SDPS_MARIA 0x80d4eaca // マリアとカンパン
|
||||
#define CRC32_SDPS_TONO 0xbb1edff1 // 遠野の森
|
||||
#define CRC32_SDPS_KAIZOKU 0xf81829e3 // 海賊家業
|
||||
#define CRC32_DALK_HINT 0x4793b843 // DALK ヒントディスク
|
||||
#define CRC32_DRSTOP 0x73fa86c4 // Dr. STOP!
|
||||
#define CRC32_PROSTUDENTG_FD 0x5ffbfee7 // Prostudent -G- (FD)
|
||||
#define CRC32_RANCE3_HINT 0x8d5ec610 // Rance3 ヒントディスク
|
||||
#define CRC32_SDPS 0xc7a20cdf // Super D.P.S
|
||||
#define CRC32_SDPS_MARIA 0x80d4eaca // Super D.P.S - マリアとカンパン
|
||||
#define CRC32_SDPS_TONO 0xbb1edff1 // Super D.P.S - 遠野の森
|
||||
#define CRC32_SDPS_KAIZOKU 0xf81829e3 // Super D.P.S - うれしたのし海賊稼業
|
||||
#define CRC32_YAKATA2 0x2df591ff // ALICEの館II
|
||||
|
||||
// SYSTEM3
|
||||
|
||||
#define CRC32_AMBIVALENZ_FD 0xa6b48dfe // AmbivalenZ (FD)
|
||||
#define CRC32_AMBIVALENZ_CD 0x4b10db69 // AmbivalenZ (CD)
|
||||
@@ -42,7 +67,8 @@
|
||||
#define CRC32_YAKATA3_CD 0x7f8f5e2a // アリスの館3 (CD)
|
||||
#define CRC32_YAKATA3_FD 0x58ebcc99 // アリスの館3 (FD)
|
||||
#define CRC32_HASHIRIONNA2 0x09f47cbd // 走り女2 (Rance 4.x ヒントディスク)
|
||||
#define CRC32_TOUSHIN2_SP 0x2172c7b2 // 闘神都市2 〜そして、それから〜
|
||||
#define CRC32_TOUSHIN2_GD 0xb5eba798 // 闘神都市2 グラフィックディスク
|
||||
#define CRC32_TOUSHIN2_SP 0x2172c7b2 // 闘神都市2 そして、それから…
|
||||
#define CRC32_OTOMESENKI 0x49a4db15 // 乙女戦記
|
||||
#define CRC32_NINGYO 0xd491e7ab // 人魚 -蘿子-
|
||||
#define CRC32_MUGENHOUYOU 0xbb27d1ba // 夢幻泡影
|
||||
|
||||
+157
-17
@@ -8,17 +8,16 @@
|
||||
#include "crc32.h"
|
||||
#include "../fileio.h"
|
||||
|
||||
uint8* DRI::load(const char* path, int page, int* size)
|
||||
uint8* DRI::load(const char* file_name, int page, int* size)
|
||||
{
|
||||
char base_path[_MAX_PATH];
|
||||
strcpy_s(base_path, _MAX_PATH, path);
|
||||
char tmp_name[_MAX_PATH];
|
||||
strcpy_s(tmp_name, _MAX_PATH, file_name);
|
||||
|
||||
FILEIO* fio = new FILEIO();
|
||||
|
||||
// ページの位置を取得
|
||||
base_path[0] = 'A';
|
||||
|
||||
if(!fio->Fopen(base_path, FILEIO_READ_BINARY)) {
|
||||
tmp_name[0] = 'A';
|
||||
if(!fio->Fopen(tmp_name, FILEIO_READ_BINARY)) {
|
||||
delete fio;
|
||||
return NULL;
|
||||
}
|
||||
@@ -48,9 +47,9 @@ uint8* DRI::load(const char* path, int page, int* size)
|
||||
|
||||
// A??.DAT以外にリンクされている場合はファイルを開き直す
|
||||
if(disk_index != 1) {
|
||||
base_path[0] = 'A' + disk_index - 1;
|
||||
tmp_name[0] = 'A' + disk_index - 1;
|
||||
fio->Fclose();
|
||||
if(!fio->Fopen(base_path, FILEIO_READ_BINARY)) {
|
||||
if(!fio->Fopen(tmp_name, FILEIO_READ_BINARY)) {
|
||||
delete fio;
|
||||
return NULL;
|
||||
}
|
||||
@@ -63,24 +62,86 @@ uint8* DRI::load(const char* 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(uint32 crc32, int page, int* size)
|
||||
uint8* DRI::load_mda(uint32 crc32_a, uint32 crc32_b, int page, int* size)
|
||||
{
|
||||
// データ取得
|
||||
const char* fname = NULL;
|
||||
|
||||
switch(crc32) {
|
||||
switch(crc32_a) {
|
||||
case CRC32_BUNKASAI: // あぶない文化祭前夜
|
||||
fname = "AMUS_AB.MDA";
|
||||
break;
|
||||
case CRC32_CRESCENT: // クレセントムーンがぁる
|
||||
fname = "AMUS_CRS.MDA";
|
||||
break;
|
||||
case CRC32_DPS: // D.P.S. - Dream Program System
|
||||
fname = "AMUS_DPS.MDA";
|
||||
break;
|
||||
case CRC32_DPS_SG: // D.P.S. SG
|
||||
// case CRC32_DPS_SG2: // D.P.S. SG set2
|
||||
case CRC32_DPS_SG3: // D.P.S. SG set2
|
||||
fname = "AMUS_SG.MDA";
|
||||
break;
|
||||
case CRC32_FUKEI: // 婦警さんVX
|
||||
fname = "AMUS_VX.MDA";
|
||||
break;
|
||||
case CRC32_INTRUDER: // Intruder -桜屋敷の探索-
|
||||
fname = "AMUS_INT";
|
||||
break;
|
||||
case CRC32_TENGU: // あぶないてんぐ伝説
|
||||
fname = "AMUS_AT";
|
||||
break;
|
||||
case CRC32_TOUSHIN_HINT: // 闘神都市 ヒントディスク
|
||||
fname = "AMUS_T1";
|
||||
break;
|
||||
case CRC32_VAMPIRE: // Little Vampire
|
||||
fname = "AMUS_LP2";
|
||||
break;
|
||||
case CRC32_YAKATA: // ALICEの館
|
||||
fname = "AMUS_AL1";
|
||||
break;
|
||||
|
||||
case CRC32_AYUMI_FD: // あゆみちゃん物語 (FD)
|
||||
case CRC32_AYUMI_HINT: // あゆみちゃん物語 ヒントディスク
|
||||
case CRC32_AYUMI_PROTO: // あゆみちゃん物語 PROTO
|
||||
fname = "AMUS_AYM";
|
||||
break;
|
||||
case CRC32_DALK_HINT: // DALK ヒントディスク
|
||||
fname = "AMUS_DLK";
|
||||
break;
|
||||
case CRC32_DRSTOP: // Dr. STOP!
|
||||
fname = "AMUS_DRS";
|
||||
break;
|
||||
case CRC32_PROSTUDENTG_FD: // Prostudent -G- (FD)
|
||||
fname = "AMUS_PSG";
|
||||
break;
|
||||
case CRC32_RANCE3_HINT: // Rance3 ヒントディスク
|
||||
fname = "AMUS_R3H";
|
||||
break;
|
||||
case CRC32_SDPS: // Super D.P.S
|
||||
fname = "AMUS_SDP";
|
||||
break;
|
||||
case CRC32_YAKATA2: // ALICEの館II
|
||||
fname = "AMUS_AL2";
|
||||
break;
|
||||
|
||||
case CRC32_AMBIVALENZ_FD: // AmbivalenZ (FD)
|
||||
case CRC32_AMBIVALENZ_CD: // AmbivalenZ (CD)
|
||||
fname = "AMUS_AMB.MDA";
|
||||
@@ -118,6 +179,9 @@ uint8* DRI::load_mda(uint32 crc32, int page, int* size)
|
||||
case CRC32_HASHIRIONNA2: // 走り女2 (Rance 4.x ヒントディスク)
|
||||
fname = "AMUS_RG2.MDA";
|
||||
break;
|
||||
case CRC32_TOUSHIN2_GD: // 闘神都市2 グラフィックディスク
|
||||
fname = "AMUS_T2";
|
||||
break;
|
||||
case CRC32_OTOMESENKI: // 乙女戦記
|
||||
fname = "AMUS_OTM.MDA";
|
||||
break;
|
||||
@@ -142,6 +206,7 @@ uint8* DRI::load_mda(uint32 crc32, int page, int* size)
|
||||
|
||||
if(page > (data_sector - link_sector) * 128 - 1) {
|
||||
// ページ番号不正
|
||||
fclose(fp);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -152,6 +217,79 @@ uint8* DRI::load_mda(uint32 crc32, int page, int* size)
|
||||
|
||||
if(disk_index == 0 || disk_index == 0x1a) {
|
||||
// 欠番
|
||||
fclose(fp);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// AMUS.MDA以外にリンクされている場合はリソースを開き直す
|
||||
if(disk_index == 2) {
|
||||
fclose(fp);
|
||||
switch(crc32_b) {
|
||||
case CRC32_DPS_SG_FAHREN: // D.P.S. SG - Fahren Fliegen
|
||||
fname = "BMUS_FAH";
|
||||
break;
|
||||
case CRC32_DPS_SG_KATEI: // D.P.S. SG - 家庭教師はステキなお仕事
|
||||
fname = "BMUS_KAT";
|
||||
break;
|
||||
case CRC32_DPS_SG_NOBUNAGA: // D.P.S. SG - 信長の淫謀
|
||||
fname = "BMUS_NOB";
|
||||
break;
|
||||
case CRC32_DPS_SG2_ANTIQUE: // D.P.S. SG set2 - ANTIQUE HOUSE
|
||||
fname = "BMUS_ANT";
|
||||
break;
|
||||
case CRC32_DPS_SG2_IKENAI: // D.P.S. SG set2 - いけない内科検診再び
|
||||
fname = "BMUS_NAI";
|
||||
break;
|
||||
case CRC32_DPS_SG2_AKAI: // D.P.S. SG set2 - 朱い夜
|
||||
fname = "BMUS_AKA";
|
||||
break;
|
||||
case CRC32_DPS_SG3_RABBIT: // D.P.S. SG set3 - Rabbit P4P
|
||||
fname = "BMUS_RAB";
|
||||
break;
|
||||
case CRC32_DPS_SG3_SHINKON: // D.P.S. SG set3 - しんこんさんものがたり
|
||||
fname = "BMUS_SIN";
|
||||
break;
|
||||
case CRC32_DPS_SG3_SOTSUGYOU: // D.P.S. SG set3 - 卒業
|
||||
fname = "BMUS_SOT";
|
||||
break;
|
||||
case CRC32_SDPS_MARIA: // Super D.P.S - マリアとカンパン
|
||||
fname = "BMUS_MTK";
|
||||
break;
|
||||
case CRC32_SDPS_TONO: // Super D.P.S - 遠野の森
|
||||
fname = "BMUS_TNM";
|
||||
break;
|
||||
case CRC32_SDPS_KAIZOKU: // Super D.P.S - うれしたのし海賊稼業
|
||||
fname = "BMUS_KAM";
|
||||
break;
|
||||
default:
|
||||
fname = NULL;
|
||||
break;
|
||||
}
|
||||
if(fname == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
fp = fopen(fname, "rb");
|
||||
if (!fp)
|
||||
return NULL;
|
||||
} else if(disk_index == 3) {
|
||||
fclose(fp);
|
||||
switch(crc32_a) {
|
||||
case CRC32_TOUSHIN_HINT: // 闘神都市 ヒントディスク
|
||||
fname = "CMUS_T1";
|
||||
break;
|
||||
default:
|
||||
fname = NULL;
|
||||
break;
|
||||
}
|
||||
if(fname == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
fp = fopen(fname, "rb");
|
||||
if (!fp)
|
||||
return NULL;
|
||||
} else if(disk_index != 1) {
|
||||
// AMUS.MDA以外にリンクされている場合は失敗
|
||||
fclose(fp);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -161,14 +299,16 @@ uint8* DRI::load_mda(uint32 crc32, int page, int* size)
|
||||
int start_sector = buf[0] | (buf[1] << 8);
|
||||
int end_sector = buf[2] | (buf[3] << 8);
|
||||
|
||||
int buffer_size = (end_sector - start_sector) * 256;
|
||||
uint8* buffer = (uint8*)malloc(buffer_size);
|
||||
if((*size = (end_sector - start_sector) * 256) == 0) {
|
||||
// サイズ不正
|
||||
return NULL;
|
||||
}
|
||||
uint8* buffer = (uint8*)malloc(*size);
|
||||
fseek(fp, (start_sector - 1) * 256, SEEK_SET);
|
||||
fread(buffer, buffer_size, 1, fp);
|
||||
fread(buffer, *size, 1, fp);
|
||||
|
||||
fclose(fp);
|
||||
|
||||
*size = buffer_size;
|
||||
return buffer;
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -15,8 +15,8 @@ public:
|
||||
DRI() {}
|
||||
~DRI() {}
|
||||
|
||||
uint8* load(const char* path, int page, int* size);
|
||||
uint8* load_mda(uint32 crc32, int page, int* size);
|
||||
uint8* load(const char* file_name, int page, int* size);
|
||||
uint8* load_mda(uint32 crc32_a, uint32 crc32_b, int page, int* size);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -302,7 +302,7 @@ std::vector<uint8> MAKOMidi::generate_smf(int current_max)
|
||||
w.send_3bytes(0xb0 + play[i].channel, 0x0a, play[i].pan);
|
||||
}
|
||||
else if(d0 == 0xec) {
|
||||
if (nact->crc32 != CRC32_DPS)
|
||||
if(!(nact->crc32_a == CRC32_DPS || nact->crc32_a == CRC32_DPS_SG || nact->crc32_a == CRC32_DPS_SG2 || nact->crc32_a == CRC32_DPS_SG3))
|
||||
mute_flag = true;
|
||||
}
|
||||
else if(d0 == 0xf5) {
|
||||
@@ -570,7 +570,7 @@ void MAKOMidi::load_mda(int page)
|
||||
int size;
|
||||
uint8* data = NULL;
|
||||
if((data = dri->load(path, page, &size)) == NULL) {
|
||||
data = dri->load_mda(nact->crc32, page, &size);
|
||||
data = dri->load_mda(nact->crc32_a, nact->crc32_b, page, &size);
|
||||
}
|
||||
|
||||
if(data) {
|
||||
|
||||
+65
-24
@@ -16,8 +16,8 @@ extern SDL_Window* g_window;
|
||||
|
||||
// 初期化
|
||||
|
||||
NACT::NACT(int sys_ver, uint32 crc32, const char* font_file, const char* playlist)
|
||||
: sys_ver(sys_ver), crc32(crc32)
|
||||
NACT::NACT(int sys_ver, uint32 crc32_a, uint32 crc32_b, const char* font_file, const char* playlist)
|
||||
: sys_ver(sys_ver), crc32_a(crc32_a), crc32_b(crc32_b)
|
||||
{
|
||||
// デバッグコンソール起動
|
||||
initialize_console();
|
||||
@@ -27,16 +27,16 @@ NACT::NACT(int sys_ver, uint32 crc32, const char* font_file, const char* playlis
|
||||
if(fio->Fopen("AG00.DAT", FILEIO_READ_BINARY)) {
|
||||
int d0, d1, d2, d3;
|
||||
char string[MAX_CAPTION];
|
||||
fio->Fgets(string);
|
||||
fio->Fgets(string, MAX_CAPTION);
|
||||
sscanf_s(string, "%d,%d,%d,%d", &d0, &d1, &d2, &d3);
|
||||
for(int i = 0; i < d1; i++) {
|
||||
// 動詞の読み込み
|
||||
fio->Fgets(string);
|
||||
fio->Fgets(string, MAX_CAPTION);
|
||||
memcpy(caption_verb[i], string, sizeof(string));
|
||||
}
|
||||
for(int i = 0; i < d2; i++) {
|
||||
// 目的語の読み込み
|
||||
fio->Fgets(string);
|
||||
fio->Fgets(string, MAX_CAPTION);
|
||||
memcpy(caption_obj[i], string, sizeof(string));
|
||||
}
|
||||
fio->Fclose();
|
||||
@@ -44,7 +44,7 @@ NACT::NACT(int sys_ver, uint32 crc32, const char* font_file, const char* playlis
|
||||
delete fio;
|
||||
|
||||
// ADISK.DAT
|
||||
if (crc32 == CRC32_PROG_OMAKE)
|
||||
if (crc32_a == CRC32_PROG_OMAKE)
|
||||
strcpy_s(adisk, 16, "AGAME.DAT");
|
||||
else
|
||||
strcpy_s(adisk, 16, "ADISK.DAT");
|
||||
@@ -165,6 +165,7 @@ void NACT::execute(T* impl)
|
||||
}
|
||||
|
||||
// 1コマンド実行
|
||||
prev_addr = scenario_addr;
|
||||
uint8 cmd = getd();
|
||||
|
||||
if(set_palette && cmd != 'P') {
|
||||
@@ -290,12 +291,14 @@ void NACT::execute(T* impl)
|
||||
default:
|
||||
if(cmd == 0x20 || (0xa1 <= cmd && cmd <= 0xdd)) {
|
||||
// message (1 byte)
|
||||
char string[2];
|
||||
char string[3];
|
||||
string[0] = cmd;
|
||||
string[1] = '\0';
|
||||
ags->draw_text(string);
|
||||
if(crc32 == CRC32_DPS && !ags->draw_menu) {
|
||||
text_refresh = false;
|
||||
if(crc32_a == CRC32_DPS || crc32_a == CRC32_DPS_SG || crc32_a == CRC32_DPS_SG2 || crc32_a == CRC32_DPS_SG3) {
|
||||
if(!ags->draw_menu) {
|
||||
text_refresh = false;
|
||||
}
|
||||
}
|
||||
|
||||
if(!ags->draw_menu && text_wait_enb && cmd != 0x20) {
|
||||
@@ -314,10 +317,13 @@ void NACT::execute(T* impl)
|
||||
SDL_Delay(16);
|
||||
}
|
||||
}
|
||||
|
||||
#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];
|
||||
@@ -325,8 +331,10 @@ void NACT::execute(T* impl)
|
||||
string[1] = getd();
|
||||
string[2] = '\0';
|
||||
ags->draw_text(string);
|
||||
if(crc32 == CRC32_DPS && !ags->draw_menu) {
|
||||
text_refresh = false;
|
||||
if(crc32_a == CRC32_DPS || crc32_a == CRC32_DPS_SG || crc32_a == CRC32_DPS_SG2 || crc32_a == CRC32_DPS_SG3) {
|
||||
if(!ags->draw_menu) {
|
||||
text_refresh = false;
|
||||
}
|
||||
}
|
||||
|
||||
if(!ags->draw_menu && text_wait_enb) {
|
||||
@@ -345,12 +353,13 @@ void NACT::execute(T* impl)
|
||||
SDL_Delay(16);
|
||||
}
|
||||
}
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
output_console(string);
|
||||
#endif
|
||||
} else {
|
||||
fatal("Unknown command %2x at %d", cmd, scenario_addr);
|
||||
if(cmd >= 0x20 && cmd < 0x7f) {
|
||||
fatal("Unknown Command: '%c' at page = %d, addr = %d", cmd, scenario_page, prev_addr);
|
||||
} else {
|
||||
fatal("Unknown Command: %02x at page = %d, addr = %d", cmd, scenario_page, prev_addr);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -372,13 +381,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()
|
||||
{
|
||||
// 連打による誤クリック防止
|
||||
Uint32 dwTime = SDL_GetTicks();
|
||||
Uint32 dwWait = dwTime + 400;
|
||||
|
||||
while(dwTime < dwWait) {
|
||||
if(terminate) {
|
||||
return;
|
||||
}
|
||||
/*
|
||||
if(get_key() == 16) {
|
||||
break;
|
||||
}
|
||||
*/
|
||||
SDL_Delay(10);
|
||||
dwTime = SDL_GetTicks();
|
||||
}
|
||||
|
||||
// クリック中の間は待機
|
||||
for(;;) {
|
||||
if(terminate) {
|
||||
return;
|
||||
}
|
||||
if(!get_key()) {
|
||||
break;
|
||||
}
|
||||
SDL_Delay(10);
|
||||
}
|
||||
}
|
||||
|
||||
// WinMainとのインターフェース
|
||||
|
||||
int NACT::get_screen_height()
|
||||
@@ -418,14 +458,15 @@ void NACT::fatal(const char* format, ...) {
|
||||
}
|
||||
|
||||
NACT* NACT::create(const char* game_id, const char* font_file, const char* playlist) {
|
||||
uint32 crc32 = NACT::calc_crc32(game_id);
|
||||
int sys_ver = NACT::get_sys_ver(crc32);
|
||||
uint32 crc32_a = NACT::calc_crc32("ADISK.DAT", game_id);
|
||||
uint32 crc32_b = NACT::calc_crc32("BDISK.DAT", game_id);
|
||||
int sys_ver = NACT::get_sys_ver(crc32_a, crc32_b);
|
||||
switch (sys_ver) {
|
||||
case 1:
|
||||
return new NACT_Sys1(crc32, font_file, playlist);
|
||||
return new NACT_Sys1(crc32_a, crc32_b, font_file, playlist);
|
||||
case 2:
|
||||
return new NACT_Sys2(crc32, font_file, playlist);
|
||||
return new NACT_Sys2(crc32_a, crc32_b, font_file, playlist);
|
||||
default:
|
||||
return new NACT_Sys3(crc32, font_file, playlist);
|
||||
return new NACT_Sys3(crc32_a, crc32_b, font_file, playlist);
|
||||
}
|
||||
}
|
||||
|
||||
+13
-12
@@ -87,7 +87,7 @@ class NACT
|
||||
{
|
||||
public:
|
||||
static NACT* create(const char* game_id, const char* font_file, const char* playlist);
|
||||
NACT(int sys_ver, uint32 crc32, const char* font_file, const char* playlist);
|
||||
NACT(int sys_ver, uint32 crc32_a, uint32 crc32_b, const char* font_file, const char* playlist);
|
||||
virtual ~NACT();
|
||||
|
||||
protected:
|
||||
@@ -109,7 +109,7 @@ protected:
|
||||
int scenario_size;
|
||||
|
||||
// アドレス、ページ管理
|
||||
int scenario_addr;
|
||||
int scenario_addr, prev_addr;
|
||||
int scenario_page;
|
||||
int label_depth;
|
||||
int label_stack[MAX_STACK];
|
||||
@@ -162,6 +162,8 @@ protected:
|
||||
uint16 random(uint16 range);
|
||||
uint32 seed;
|
||||
|
||||
void wait_after_open_menu();
|
||||
|
||||
uint8 get_key();
|
||||
void get_cursor(int* x, int* y);
|
||||
void set_cursor(int x, int y);
|
||||
@@ -172,7 +174,7 @@ protected:
|
||||
#endif
|
||||
int mouse_x = 0, mouse_y = 0;
|
||||
|
||||
static uint32 calc_crc32(const char* game_id);
|
||||
static uint32 calc_crc32(const char* file_name, const char* game_id);
|
||||
|
||||
// Y27 ダイアログ
|
||||
void text_dialog();
|
||||
@@ -193,20 +195,21 @@ public:
|
||||
void select_sound(int dev);
|
||||
|
||||
const char* get_game_id();
|
||||
static const int get_sys_ver(uint32 crc32);
|
||||
static const int get_sys_ver(uint32 crc32_a, uint32 crc32_b);
|
||||
const char* get_title();
|
||||
|
||||
bool text_skip_enb; // メッセージスキップ
|
||||
bool text_wait_enb; // テキスト表示のウェイト有効/無効
|
||||
int sys_ver;
|
||||
uint32 crc32;
|
||||
uint32 crc32_a; // ADISK
|
||||
uint32 crc32_b; // BDISK for D.P.S -SG- and Super D.P.S
|
||||
|
||||
// for Y27
|
||||
char tvar[10][22];
|
||||
char tvar[10][33];
|
||||
int tvar_index, tvar_maxlen;
|
||||
|
||||
// デバッグログ
|
||||
void output_console(char log[]);
|
||||
void output_console(const char *format, ...);
|
||||
|
||||
int get_scenario_page() const { return scenario_page; }
|
||||
|
||||
@@ -215,7 +218,7 @@ public:
|
||||
|
||||
class NACT_Sys1 : public NACT {
|
||||
public:
|
||||
NACT_Sys1(uint32 crc32, const char* font_file, const char* playlist);
|
||||
NACT_Sys1(uint32 crc32_a, uint32 crc32_b, const char* font_file, const char* playlist);
|
||||
void cmd_calc();
|
||||
void cmd_branch();
|
||||
void cmd_label_jump();
|
||||
@@ -258,8 +261,6 @@ private:
|
||||
uint16 cali();
|
||||
uint16 cali2();
|
||||
|
||||
int menu_max; // メニューの改ページ
|
||||
|
||||
// Intruder Zコマンド
|
||||
int paint_x;
|
||||
int paint_y;
|
||||
@@ -268,7 +269,7 @@ private:
|
||||
|
||||
class NACT_Sys2 : public NACT {
|
||||
public:
|
||||
NACT_Sys2(uint32 crc32, const char* font_file, const char* playlist);
|
||||
NACT_Sys2(uint32 crc32_a, uint32 crc32_b, const char* font_file, const char* playlist);
|
||||
void cmd_calc();
|
||||
void cmd_branch();
|
||||
void cmd_label_jump();
|
||||
@@ -314,7 +315,7 @@ private:
|
||||
|
||||
class NACT_Sys3 : public NACT {
|
||||
public:
|
||||
NACT_Sys3(uint32 crc32, const char* font_file, const char* playlist);
|
||||
NACT_Sys3(uint32 crc32_a, uint32 crc32_b, const char* font_file, const char* playlist);
|
||||
void cmd_calc();
|
||||
void cmd_branch();
|
||||
void cmd_label_jump();
|
||||
|
||||
+65
-73
@@ -13,52 +13,72 @@ namespace {
|
||||
const struct CRCTable {
|
||||
const char* id;
|
||||
int sys_ver;
|
||||
uint32 crc32;
|
||||
const char* title;
|
||||
uint32 crc32_a;
|
||||
uint32 crc32_b;
|
||||
} crc_table[] = {
|
||||
{"crescent", 1, CRC32_CRESCENT, "クレセントムーンがぁる"},
|
||||
{"dps", 1, CRC32_DPS, "D.P.S - Dream Program System"},
|
||||
{"fukei", 1, CRC32_FUKEI, "婦警さんVX"},
|
||||
{"intruder", 1, CRC32_INTRUDER, "Intruder -桜屋敷の探索-"},
|
||||
{"tengu", 1, CRC32_TENGU, "あぶないてんぐ伝説"},
|
||||
{"little_vampire", 1, CRC32_VAMPIRE, "Little Vampire"},
|
||||
{"bunkasai", 1, "あぶない文化祭前夜", CRC32_BUNKASAI},
|
||||
{"crescent", 1, "クレセントムーンがぁる", CRC32_CRESCENT},
|
||||
{"dps", 1, "D.P.S - Dream Program System", CRC32_DPS},
|
||||
{"dps_sg_fahren", 1, "D.P.S SG - Fahren Fliegen", CRC32_DPS_SG, CRC32_DPS_SG_FAHREN},
|
||||
{"dps_sg_katei", 1, "D.P.S SG - 家庭教師はステキなお仕事", CRC32_DPS_SG, CRC32_DPS_SG_KATEI},
|
||||
{"dps_sg_nobunaga", 1, "D.P.S SG - 信長の淫謀", CRC32_DPS_SG, CRC32_DPS_SG_NOBUNAGA},
|
||||
{"dps_sg2_antique", 1, "D.P.S SG set2 - ANTIQUE HOUSE", CRC32_DPS_SG2, CRC32_DPS_SG2_ANTIQUE},
|
||||
{"dps_sg2_ikenai", 1, "D.P.S SG set2 - いけない内科検診再び", CRC32_DPS_SG2, CRC32_DPS_SG2_IKENAI},
|
||||
{"dps_sg2_akai", 1, "D.P.S SG set2 - 朱い夜", CRC32_DPS_SG2, CRC32_DPS_SG2_AKAI},
|
||||
{"dps_sg3_rabbit", 1, "D.P.S SG set3 - Rabbit P4P", CRC32_DPS_SG3, CRC32_DPS_SG3_RABBIT},
|
||||
{"dps_sg3_shinkon", 1, "D.P.S SG set3 - しんこんさんものがたり", CRC32_DPS_SG3, CRC32_DPS_SG3_SHINKON},
|
||||
{"dps_sg3_sotsugyou", 1, "D.P.S SG set3 - 卒業", CRC32_DPS_SG3, CRC32_DPS_SG3_SOTSUGYOU},
|
||||
{"fukei", 1, "婦警さんVX", CRC32_FUKEI},
|
||||
{"intruder", 1, "Intruder -桜屋敷の探索-", CRC32_INTRUDER},
|
||||
{"tengu", 1, "あぶないてんぐ伝説", CRC32_TENGU},
|
||||
{"toushin_hint", 1, "闘神都市 ヒントディスク", CRC32_TOUSHIN_HINT},
|
||||
{"little_vampire", 1, "Little Vampire", CRC32_VAMPIRE},
|
||||
{"yakata", 1, "ALICEの館", CRC32_YAKATA},
|
||||
|
||||
{"ayumi_proto", 2, CRC32_AYUMI_PROTO, "あゆみちゃん物語 PROTO"},
|
||||
{"sdps_maria", 2, CRC32_SDPS_MARIA, "Super D.P.S"},
|
||||
{"sdps_tono", 2, CRC32_SDPS_TONO, "Super D.P.S"},
|
||||
{"sdps_kaizoku", 2, CRC32_SDPS_KAIZOKU, "Super D.P.S"},
|
||||
{"prog_fd", 2, CRC32_PROSTUDENTG_FD, "Prostudent G"},
|
||||
{"ayumi_fd", 2, "あゆみちゃん物語", CRC32_AYUMI_FD},
|
||||
{"ayumi_hint", 2, "あゆみちゃん物語 ヒントディスク", CRC32_AYUMI_HINT},
|
||||
{"ayumi_proto", 2, "あゆみちゃん物語 PROTO", CRC32_AYUMI_PROTO},
|
||||
{"dalk_hint", 2, "DALK ヒントディスク", CRC32_DALK_HINT},
|
||||
{"drstop", 2, "Dr. STOP!", CRC32_DRSTOP},
|
||||
{"prog_fd", 2, "Prostudent G", CRC32_PROSTUDENTG_FD},
|
||||
{"rance3_hint", 2, "Rance3 ヒントディスク", CRC32_RANCE3_HINT},
|
||||
{"sdps_maria", 2, "Super D.P.S - マリアとカンパン", CRC32_SDPS, CRC32_SDPS_MARIA},
|
||||
{"sdps_tono", 2, "Super D.P.S - 遠野の森", CRC32_SDPS, CRC32_SDPS_TONO},
|
||||
{"sdps_kaizoku", 2, "Super D.P.S - うれしたのし海賊稼業", CRC32_SDPS, CRC32_SDPS_KAIZOKU},
|
||||
{"yakata2", 2, "ALICEの館II", CRC32_YAKATA2},
|
||||
|
||||
{"ambivalenz_fd", 3, CRC32_AMBIVALENZ_FD, "AmbivalenZ −二律背反−"},
|
||||
{"ambivalenz_cd", 3, CRC32_AMBIVALENZ_CD, "AmbivalenZ −二律背反−"},
|
||||
{"dps_all", 3, CRC32_DPSALL, "D.P.S. 全部"},
|
||||
{"funnybee_cd", 3, CRC32_FUNNYBEE_CD, "宇宙快盗ファニーBee"},
|
||||
// {"funnybee_patch", 3, CRC32_FUNNYBEE_PATCH, "宇宙快盗ファニーBee"},
|
||||
{"funnybee_fd", 3, CRC32_FUNNYBEE_FD, "宇宙快盗ファニーBee"},
|
||||
{"onlyyou", 3, CRC32_ONLYYOU, "Only You −世紀末のジュリエット達−"},
|
||||
{"onlyyou_demo", 3, CRC32_ONLYYOU_DEMO, "Only You −世紀末のジュリエット達− デモ版"},
|
||||
{"prog_cd", 3, CRC32_PROSTUDENTG_CD, "Prostudent G"},
|
||||
{"prog_omake", 3, CRC32_PROG_OMAKE, "Prostudent G おまけ"},
|
||||
{"rance41", 3, CRC32_RANCE41, "ランス 4.1 〜お薬工場を救え!〜"},
|
||||
{"rance42", 3, CRC32_RANCE42, "ランス 4.2 〜エンジェル組〜"},
|
||||
{"ayumi_cd", 3, CRC32_AYUMI_CD, "あゆみちゃん物語"},
|
||||
{"ayumi_live_256", 3, CRC32_AYUMI_JISSHA_256, "あゆみちゃん物語 実写版"},
|
||||
{"ayumi_live_full", 3, CRC32_AYUMI_JISSHA_FULL, "あゆみちゃん物語 フルカラー実写版"},
|
||||
{"yakata3_cd", 3, CRC32_YAKATA3_CD, "アリスの館3"},
|
||||
{"yakata3_fd", 3, CRC32_YAKATA3_FD, "アリスの館3"},
|
||||
{"hashirionna2", 3, CRC32_HASHIRIONNA2, "走り女2"},
|
||||
{"toushin2_sp", 3, CRC32_TOUSHIN2_SP, "闘神都市2 そして、それから…"},
|
||||
{"otome", 3, CRC32_OTOMESENKI, "乙女戦記"},
|
||||
{"ningyo", 3, CRC32_NINGYO, "人魚 -蘿子-"},
|
||||
{"mugen", 3, CRC32_MUGENHOUYOU, "夢幻泡影"},
|
||||
{"ambivalenz_fd", 3, "AmbivalenZ −二律背反−", CRC32_AMBIVALENZ_FD},
|
||||
{"ambivalenz_cd", 3, "AmbivalenZ −二律背反−", CRC32_AMBIVALENZ_CD},
|
||||
{"dps_all", 3, "D.P.S. 全部", CRC32_DPSALL},
|
||||
{"funnybee_cd", 3, "宇宙快盗ファニーBee", CRC32_FUNNYBEE_CD},
|
||||
// {"funnybee_patch", 3, "宇宙快盗ファニーBee", CRC32_FUNNYBEE_PATCH},
|
||||
{"funnybee_fd", 3, "宇宙快盗ファニーBee", CRC32_FUNNYBEE_FD},
|
||||
{"onlyyou", 3, "Only You −世紀末のジュリエット達−", CRC32_ONLYYOU},
|
||||
{"onlyyou_demo", 3, "Only You −世紀末のジュリエット達− デモ版", CRC32_ONLYYOU_DEMO},
|
||||
{"prog_cd", 3, "Prostudent G", CRC32_PROSTUDENTG_CD},
|
||||
{"prog_omake", 3, "Prostudent G おまけ", CRC32_PROG_OMAKE},
|
||||
{"rance41", 3, "ランス 4.1 〜お薬工場を救え!〜", CRC32_RANCE41},
|
||||
{"rance42", 3, "ランス 4.2 〜エンジェル組〜", CRC32_RANCE42},
|
||||
{"ayumi_cd", 3, "あゆみちゃん物語", CRC32_AYUMI_CD},
|
||||
{"ayumi_live_256", 3, "あゆみちゃん物語 実写版", CRC32_AYUMI_JISSHA_256},
|
||||
{"ayumi_live_full", 3, "あゆみちゃん物語 フルカラー実写版", CRC32_AYUMI_JISSHA_FULL},
|
||||
{"yakata3_cd", 3, "アリスの館3", CRC32_YAKATA3_CD},
|
||||
{"yakata3_fd", 3, "アリスの館3", CRC32_YAKATA3_FD},
|
||||
{"hashirionna2", 3, "走り女2", CRC32_HASHIRIONNA2},
|
||||
{"toushin2_gd", 3,"闘神都市2 グラフィックディスク", CRC32_TOUSHIN2_GD},
|
||||
{"toushin2_sp", 3, "闘神都市2 そして、それから…", CRC32_TOUSHIN2_SP},
|
||||
{"otome", 3, "乙女戦記", CRC32_OTOMESENKI},
|
||||
{"ningyo", 3, "人魚 -蘿子-", CRC32_NINGYO},
|
||||
{"mugen", 3, "夢幻泡影", CRC32_MUGENHOUYOU},
|
||||
|
||||
{NULL, 0, 0, NULL},
|
||||
{NULL},
|
||||
};
|
||||
|
||||
const CRCTable* lookup(uint32 crc32)
|
||||
const CRCTable* lookup(uint32 crc32_a, uint32 crc32_b)
|
||||
{
|
||||
for (const CRCTable* t = crc_table; t->id; t++) {
|
||||
if (crc32 == t->crc32)
|
||||
if (crc32_a == t->crc32_a && (!t->crc32_b || crc32_b == t->crc32_b))
|
||||
return t;
|
||||
}
|
||||
return NULL;
|
||||
@@ -66,18 +86,19 @@ const CRCTable* lookup(uint32 crc32)
|
||||
|
||||
} // namespace
|
||||
|
||||
uint32 NACT::calc_crc32(const char* game_id)
|
||||
uint32 NACT::calc_crc32(const char* file_name, const char* game_id)
|
||||
{
|
||||
if (game_id) {
|
||||
for (const CRCTable* t = crc_table; t->id; t++) {
|
||||
if (strcmp(t->id, game_id) == 0)
|
||||
return t->crc32;
|
||||
return file_name[0] == 'A' ? t->crc32_a : t->crc32_b;
|
||||
}
|
||||
}
|
||||
|
||||
uint32 crc = 0;
|
||||
FILEIO* fio = new FILEIO();
|
||||
if(fio->Fopen("ADISK.DAT", FILEIO_READ_BINARY)) {
|
||||
|
||||
if(fio->Fopen(file_name, FILEIO_READ_BINARY)) {
|
||||
uint32 table[256];
|
||||
for(int i = 0; i < 256; i++) {
|
||||
uint32 c = i;
|
||||
@@ -99,56 +120,27 @@ uint32 NACT::calc_crc32(const char* game_id)
|
||||
}
|
||||
fio->Fclose();
|
||||
}
|
||||
if(crc == CRC32_SDPS) {
|
||||
// Super D.P.Sの場合はBDISK.DATのCRCを取る
|
||||
if(fio->Fopen("BDISK.DAT", FILEIO_READ_BINARY)) {
|
||||
uint32 table[256];
|
||||
for(int i = 0; i < 256; i++) {
|
||||
uint32 c = i;
|
||||
for(int j = 0; j < 8; j++) {
|
||||
if(c & 1) {
|
||||
c = (c >> 1) ^ 0xedb88320;
|
||||
} else {
|
||||
c >>= 1;
|
||||
}
|
||||
}
|
||||
table[i] = c;
|
||||
}
|
||||
// BDISK.DATの先頭256bytes
|
||||
crc = 0;
|
||||
for(int i = 0; i < 256; i++) {
|
||||
int d = fio->Fgetc();
|
||||
uint32 c = ~crc;
|
||||
c = table[(c ^ d) & 0xff] ^ (c >> 8);
|
||||
crc = ~c;
|
||||
}
|
||||
fio->Fclose();
|
||||
}
|
||||
}
|
||||
delete fio;
|
||||
#if 0
|
||||
printf("CRC: %x\n", crc);
|
||||
#endif
|
||||
return crc;
|
||||
}
|
||||
|
||||
const char* NACT::get_game_id()
|
||||
{
|
||||
if (const CRCTable* entry = lookup(crc32))
|
||||
if (const CRCTable* entry = lookup(crc32_a, crc32_b))
|
||||
return entry->id;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const int NACT::get_sys_ver(uint32 crc32)
|
||||
const int NACT::get_sys_ver(uint32 crc32_a, uint32 crc32_b)
|
||||
{
|
||||
if (const CRCTable* entry = lookup(crc32))
|
||||
if (const CRCTable* entry = lookup(crc32_a, crc32_b))
|
||||
return entry->sys_ver;
|
||||
return 3;
|
||||
}
|
||||
|
||||
const char* NACT::get_title()
|
||||
{
|
||||
if (const CRCTable* entry = lookup(crc32))
|
||||
if (const CRCTable* entry = lookup(crc32_a, crc32_b))
|
||||
return entry->title;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
+244
-344
File diff suppressed because it is too large
Load Diff
+247
-269
@@ -55,8 +55,8 @@
|
||||
} \
|
||||
}
|
||||
|
||||
NACT_Sys2::NACT_Sys2(uint32 crc32, const char* font_file, const char* playlist)
|
||||
: NACT(2, crc32, font_file, playlist)
|
||||
NACT_Sys2::NACT_Sys2(uint32 crc32_a, uint32 crc32_b, const char* font_file, const char* playlist)
|
||||
: NACT(2, crc32_a, crc32_b, font_file, playlist)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -70,11 +70,7 @@ void NACT_Sys2::cmd_calc()
|
||||
}
|
||||
var[index] = cali();
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\n!var[%d]:%d!", index, var[index]);
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\n!var[%d]:%d!", index, var[index]);
|
||||
}
|
||||
|
||||
void NACT_Sys2::cmd_branch()
|
||||
@@ -84,7 +80,9 @@ void NACT_Sys2::cmd_branch()
|
||||
bool set_menu = false;
|
||||
|
||||
if(!condition) {
|
||||
// 次の'}'命令までスキップする(ネストも考慮する)
|
||||
for(;;) {
|
||||
prev_addr = scenario_addr;
|
||||
uint8 cmd = getd();
|
||||
|
||||
if(cmd == '!') {
|
||||
@@ -103,19 +101,16 @@ void NACT_Sys2::cmd_branch()
|
||||
break;
|
||||
}
|
||||
} else if(cmd == '@') {
|
||||
getd();
|
||||
getd();
|
||||
getw();
|
||||
} else if(cmd == '\\') {
|
||||
getd();
|
||||
getd();
|
||||
getw();
|
||||
} else if(cmd == '&') {
|
||||
cali();
|
||||
} else if(cmd == '%') {
|
||||
cali();
|
||||
} else if(cmd == '$') {
|
||||
if(!set_menu) {
|
||||
getd();
|
||||
getd();
|
||||
getw();
|
||||
set_menu = true;
|
||||
} else {
|
||||
set_menu = false;
|
||||
@@ -123,14 +118,12 @@ void NACT_Sys2::cmd_branch()
|
||||
} else if(cmd == '[') {
|
||||
getd();
|
||||
getd();
|
||||
getd();
|
||||
getd();
|
||||
getw();
|
||||
} else if(cmd == ':') {
|
||||
cali();
|
||||
getd();
|
||||
getd();
|
||||
getd();
|
||||
getd();
|
||||
getw();
|
||||
} else if(cmd == ']') {
|
||||
|
||||
} else if(cmd == 'A') {
|
||||
@@ -166,7 +159,8 @@ void NACT_Sys2::cmd_branch()
|
||||
} else if(cmd == 'I') {
|
||||
cali();
|
||||
cali();
|
||||
getd();
|
||||
// getd();
|
||||
cali();
|
||||
} else if(cmd == 'J') {
|
||||
cali();
|
||||
cali();
|
||||
@@ -206,11 +200,48 @@ void NACT_Sys2::cmd_branch()
|
||||
cali();
|
||||
cali();
|
||||
} else if(cmd == 'U') {
|
||||
getd();
|
||||
getd();
|
||||
if(crc32_a == CRC32_YAKATA2) {
|
||||
cali();
|
||||
cali();
|
||||
} else {
|
||||
getd();
|
||||
getd();
|
||||
}
|
||||
} else if(cmd == 'V') {
|
||||
#if 1
|
||||
cali();
|
||||
cali();
|
||||
cali();
|
||||
cali();
|
||||
cali();
|
||||
cali();
|
||||
cali();
|
||||
cali();
|
||||
cali();
|
||||
cali();
|
||||
cali();
|
||||
cali();
|
||||
cali();
|
||||
cali();
|
||||
cali();
|
||||
cali();
|
||||
cali();
|
||||
cali();
|
||||
cali();
|
||||
cali();
|
||||
cali();
|
||||
cali();
|
||||
cali();
|
||||
cali();
|
||||
cali();
|
||||
cali();
|
||||
cali();
|
||||
cali();
|
||||
cali();
|
||||
#else
|
||||
cali();
|
||||
cali();
|
||||
#endif
|
||||
} else if(cmd == 'W') {
|
||||
cali();
|
||||
cali();
|
||||
@@ -230,17 +261,17 @@ void NACT_Sys2::cmd_branch()
|
||||
// message (2 bytes)
|
||||
getd();
|
||||
} else {
|
||||
fatal("cmd_branch: invalid command %2x", cmd);
|
||||
if(cmd >= 0x20 && cmd < 0x7f) {
|
||||
fatal("Unknown Command: '%c' at page = %d, addr = %d", cmd, scenario_page, prev_addr);
|
||||
} else {
|
||||
fatal("Unknown Command: %02x at page = %d, addr = %d", cmd, scenario_page, prev_addr);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\n{%d:", condition);
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\n{%d:", condition);
|
||||
}
|
||||
|
||||
void NACT_Sys2::cmd_label_jump()
|
||||
@@ -248,22 +279,14 @@ void NACT_Sys2::cmd_label_jump()
|
||||
int next_addr = getw();
|
||||
scenario_addr = next_addr;
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\n@%x:", next_addr);
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\n@%x:", next_addr);
|
||||
}
|
||||
|
||||
void NACT_Sys2::cmd_label_call()
|
||||
{
|
||||
int next_addr = getw();
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\n\\%x:", next_addr);
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\n\\%x:", next_addr);
|
||||
|
||||
if(next_addr == 0) {
|
||||
// リターン
|
||||
@@ -285,22 +308,14 @@ void NACT_Sys2::cmd_page_jump()
|
||||
scenario_page = next_page;
|
||||
scenario_addr = 2;
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\n&%d:", next_page);
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\n&%d:", next_page);
|
||||
}
|
||||
|
||||
void NACT_Sys2::cmd_page_call()
|
||||
{
|
||||
int next_page = cali(), next_addr;
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\n%%%d:", next_page);
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\n%%%d:", next_page);
|
||||
|
||||
if(next_page == 0) {
|
||||
// リターン
|
||||
@@ -327,11 +342,7 @@ void NACT_Sys2::cmd_set_menu()
|
||||
ags->menu_dest_y += ags->menu_font_size + 2;
|
||||
ags->draw_menu = false;
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "$");
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("$");
|
||||
} else {
|
||||
if(!menu_index) {
|
||||
ags->clear_menu_window();
|
||||
@@ -342,42 +353,21 @@ void NACT_Sys2::cmd_set_menu()
|
||||
ags->menu_dest_y += 2;
|
||||
ags->draw_menu = true;
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\n$%x,", menu_addr[menu_index - 1]);
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\n$%x,", menu_addr[menu_index - 1]);
|
||||
}
|
||||
}
|
||||
|
||||
void NACT_Sys2::cmd_open_menu()
|
||||
{
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\n]");
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\n]");
|
||||
|
||||
if(!menu_index) {
|
||||
scenario_addr = scenario_data[0] | (scenario_data[1] << 8);
|
||||
return;
|
||||
}
|
||||
|
||||
// クリック中の間は待機
|
||||
for(;;) {
|
||||
if(terminate) {
|
||||
return;
|
||||
}
|
||||
// if(get_key() != 32) {
|
||||
if(!get_key()) {
|
||||
break;
|
||||
}
|
||||
SDL_Delay(10);
|
||||
}
|
||||
|
||||
// メニュー表示
|
||||
ags->open_menu_window(menu_window);
|
||||
int current_index = 0;
|
||||
|
||||
// マウス移動
|
||||
int sx = ags->menu_w[menu_window - 1].sx;
|
||||
@@ -386,17 +376,20 @@ void NACT_Sys2::cmd_open_menu()
|
||||
int mx = ex - 16;
|
||||
int my = sy + 10;
|
||||
int height = ags->menu_font_size + 4;
|
||||
int current_index = 0;
|
||||
|
||||
set_cursor(mx, my);
|
||||
wait_after_open_menu();
|
||||
|
||||
// メニュー選択
|
||||
for(;;) {
|
||||
for(bool selectable = true;;) {
|
||||
// 入力待機
|
||||
int val = 0, current_mx = mx, current_my = my;
|
||||
for(;;) {
|
||||
if(terminate) {
|
||||
return;
|
||||
}
|
||||
if((val = get_key())) {
|
||||
if((val = get_key()) != 0) {
|
||||
SDL_Delay(100);
|
||||
break;
|
||||
}
|
||||
@@ -425,6 +418,9 @@ void NACT_Sys2::cmd_open_menu()
|
||||
if(sx <= mx && mx <= ex && 0 <= index && index < menu_index) {
|
||||
current_index = index;
|
||||
ags->redraw_menu_window(menu_window, current_index);
|
||||
selectable = true;
|
||||
} else {
|
||||
selectable = false;
|
||||
}
|
||||
} else if(val == 1 || val == 2 || val == 4 || val == 8) {
|
||||
if(val == 1) {
|
||||
@@ -437,7 +433,8 @@ void NACT_Sys2::cmd_open_menu()
|
||||
current_index = menu_index - 1;
|
||||
}
|
||||
ags->redraw_menu_window(menu_window, current_index);
|
||||
} else if(val == 16) {
|
||||
selectable = true;
|
||||
} else if(val == 16 && selectable) {
|
||||
break;
|
||||
} else if(val == 32) {
|
||||
current_index = -1;
|
||||
@@ -468,11 +465,7 @@ void NACT_Sys2::cmd_set_verbobj()
|
||||
menu_obj[menu_index++] = obj;
|
||||
verb_obj = true;
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\n[%x,%s,%s:", addr, caption_verb[verb], caption_obj[obj]);
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\n[%x,%s,%s:", addr, caption_verb[verb], caption_obj[obj]);
|
||||
}
|
||||
|
||||
void NACT_Sys2::cmd_set_verbobj2()
|
||||
@@ -489,21 +482,13 @@ void NACT_Sys2::cmd_set_verbobj2()
|
||||
}
|
||||
verb_obj = true;
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\n:%d,%x,%s,%s:", condition, addr, caption_verb[verb], caption_obj[obj]);
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\n:%d,%x,%s,%s:", condition, addr, caption_verb[verb], caption_obj[obj]);
|
||||
}
|
||||
|
||||
void NACT_Sys2::cmd_open_verb()
|
||||
{
|
||||
// 動詞メニューの表示
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\nopen verb-obj menu");
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\nopen verb-obj menu");
|
||||
verb_obj = false;
|
||||
|
||||
// 表示する動詞のチェック
|
||||
@@ -532,21 +517,8 @@ void NACT_Sys2::cmd_open_verb()
|
||||
}
|
||||
ags->draw_menu = false;
|
||||
|
||||
// クリック中の間は待機
|
||||
for(;;) {
|
||||
if(terminate) {
|
||||
return;
|
||||
}
|
||||
// if(get_key() != 32) {
|
||||
if(!get_key()) {
|
||||
break;
|
||||
}
|
||||
SDL_Delay(10);
|
||||
}
|
||||
|
||||
// メニュー表示
|
||||
ags->open_menu_window(menu_window);
|
||||
int current_index = 0;
|
||||
|
||||
// マウス移動
|
||||
int sx = ags->menu_w[menu_window - 1].sx;
|
||||
@@ -555,17 +527,20 @@ void NACT_Sys2::cmd_open_verb()
|
||||
int mx = ex - 16;
|
||||
int my = sy + 10;
|
||||
int height = ags->menu_font_size + 4;
|
||||
int current_index = 0;
|
||||
|
||||
set_cursor(mx, my);
|
||||
wait_after_open_menu();
|
||||
|
||||
// メニュー選択
|
||||
for(;;) {
|
||||
for(bool selectable = true;;) {
|
||||
// 入力待機
|
||||
int val = 0, current_mx = mx, current_my = my;
|
||||
for(;;) {
|
||||
if(terminate) {
|
||||
return;
|
||||
}
|
||||
if((val = get_key())) {
|
||||
if((val = get_key()) != 0) {
|
||||
SDL_Delay(100);
|
||||
break;
|
||||
}
|
||||
@@ -594,6 +569,9 @@ void NACT_Sys2::cmd_open_verb()
|
||||
if(sx <= mx && mx <= ex && 0 <= mindex && mindex < index) {
|
||||
current_index = mindex;
|
||||
ags->redraw_menu_window(menu_window, current_index);
|
||||
selectable = true;
|
||||
} else {
|
||||
selectable = false;
|
||||
}
|
||||
} else if(val == 1 || val == 2 || val == 4 || val == 8) {
|
||||
if(val == 1) {
|
||||
@@ -606,7 +584,8 @@ void NACT_Sys2::cmd_open_verb()
|
||||
current_index = index - 1;
|
||||
}
|
||||
ags->redraw_menu_window(menu_window, current_index);
|
||||
} else if(val == 16) {
|
||||
selectable = true;
|
||||
} else if(val == 16 && selectable) {
|
||||
break;
|
||||
} else if(val == 32) {
|
||||
current_index = -1;
|
||||
@@ -676,21 +655,8 @@ void NACT_Sys2::cmd_open_obj(int verb)
|
||||
ags->menu_dest_y += ags->menu_font_size + 2;
|
||||
ags->draw_menu = false;
|
||||
|
||||
// クリック中の間は待機
|
||||
for(;;) {
|
||||
if(terminate) {
|
||||
return;
|
||||
}
|
||||
// if(get_key() != 32) {
|
||||
if(!get_key()) {
|
||||
break;
|
||||
}
|
||||
SDL_Delay(10);
|
||||
}
|
||||
|
||||
// メニュー表示
|
||||
ags->open_menu_window(menu_window);
|
||||
int current_index = 0;
|
||||
|
||||
// マウス移動
|
||||
int sx = ags->menu_w[menu_window - 1].sx;
|
||||
@@ -699,17 +665,20 @@ void NACT_Sys2::cmd_open_obj(int verb)
|
||||
int mx = ex - 16;
|
||||
int my = sy + 10;
|
||||
int height = ags->menu_font_size + 4;
|
||||
int current_index = 0;
|
||||
|
||||
set_cursor(mx, my);
|
||||
wait_after_open_menu();
|
||||
|
||||
// メニュー選択
|
||||
for(;;) {
|
||||
for(bool selectable = true;;) {
|
||||
// 入力待機
|
||||
int val = 0, current_mx = mx, current_my = my;
|
||||
for(;;) {
|
||||
if(terminate) {
|
||||
return;
|
||||
}
|
||||
if((val = get_key())) {
|
||||
if((val = get_key()) != 0) {
|
||||
SDL_Delay(100);
|
||||
break;
|
||||
}
|
||||
@@ -738,6 +707,9 @@ void NACT_Sys2::cmd_open_obj(int verb)
|
||||
if(sx <= mx && mx <= ex && 0 <= mindex && mindex < index) {
|
||||
current_index = mindex;
|
||||
ags->redraw_menu_window(menu_window, current_index);
|
||||
selectable = true;
|
||||
} else {
|
||||
selectable = false;
|
||||
}
|
||||
} else if(val == 1 || val == 2 || val == 4 || val == 8) {
|
||||
if(val == 1) {
|
||||
@@ -750,7 +722,8 @@ void NACT_Sys2::cmd_open_obj(int verb)
|
||||
current_index = index - 1;
|
||||
}
|
||||
ags->redraw_menu_window(menu_window, current_index);
|
||||
} else if(val == 16) {
|
||||
selectable = true;
|
||||
} else if(val == 16 && selectable) {
|
||||
break;
|
||||
} else if(val == 32) {
|
||||
current_index = -1;
|
||||
@@ -773,11 +746,7 @@ void NACT_Sys2::cmd_open_obj(int verb)
|
||||
|
||||
void NACT_Sys2::cmd_a()
|
||||
{
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "A\n");
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("A\n");
|
||||
|
||||
if(!text_skip_enb) {
|
||||
// Pushマークの表示
|
||||
@@ -821,13 +790,12 @@ void NACT_Sys2::cmd_b()
|
||||
int p4 = cali();
|
||||
int p5 = cali();
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\nB %d,%d,%d,%d,%d,%d,%d:", cmd, index, p1, p2, p3, p4, p5);
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\nB %d,%d,%d,%d,%d,%d,%d:", cmd, index, p1, p2, p3, p4, p5);
|
||||
|
||||
if(cmd == 1) {
|
||||
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;
|
||||
@@ -840,7 +808,10 @@ void NACT_Sys2::cmd_b()
|
||||
ags->menu_w[index - 1].screen = NULL;
|
||||
}
|
||||
} else if(cmd == 2) {
|
||||
// if(crc32 == CRC32_PROSTUDENTG_FD) {
|
||||
if(crc32_a == CRC32_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;
|
||||
@@ -863,9 +834,16 @@ void NACT_Sys2::cmd_b()
|
||||
ags->text_w[index - 1].window = NULL;
|
||||
}
|
||||
} else if(cmd == 4) {
|
||||
if(crc32_a == CRC32_AYUMI_FD || crc32_a == CRC32_AYUMI_HINT) {
|
||||
p1 = 1;
|
||||
//p5 ? 0 : 1; // 逆?
|
||||
p5 = 0;
|
||||
} else if(crc32_a == CRC32_DRSTOP) {
|
||||
p1 = 1;
|
||||
}
|
||||
if(p5 == 0) {
|
||||
// ウィンドウ退避
|
||||
// if(crc32 == 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;
|
||||
@@ -889,11 +867,7 @@ void NACT_Sys2::cmd_d()
|
||||
int p7 = cali();
|
||||
int p8 = cali();
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\nD %d,%d,%d,%d,%d,%d,%d,%d:", p1, p2, p3, p4, p5, p6, p7, p8);
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\nD %d,%d,%d,%d,%d,%d,%d,%d:", p1, p2, p3, p4, p5, p6, p7, p8);
|
||||
}
|
||||
|
||||
void NACT_Sys2::cmd_e()
|
||||
@@ -902,20 +876,12 @@ void NACT_Sys2::cmd_e()
|
||||
int p2 = cali();
|
||||
int p3 = cali();
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\nE %d,%d,%d:", p1, p2, p3);
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\nE %d,%d,%d:", p1, p2, p3);
|
||||
}
|
||||
|
||||
void NACT_Sys2::cmd_f()
|
||||
{
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\nF");
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\nF");
|
||||
|
||||
scenario_addr = 2;
|
||||
}
|
||||
@@ -924,18 +890,24 @@ void NACT_Sys2::cmd_g()
|
||||
{
|
||||
int page = cali();
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\nG %d:", page);
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\nG %d:", page);
|
||||
|
||||
if(crc32 == CRC32_SDPS_TONO || crc32 == CRC32_SDPS_KAIZOKU) {
|
||||
if(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_Sys2::cmd_h()
|
||||
@@ -943,11 +915,7 @@ void NACT_Sys2::cmd_h()
|
||||
int length = getd();
|
||||
int val = cali();
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\nH %d,%d:", length, val);
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\nH %d,%d:", length, val);
|
||||
|
||||
// 8桁の文字列を生成
|
||||
char tmp[8];
|
||||
@@ -987,13 +955,10 @@ void NACT_Sys2::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_Sys2::cmd_j()
|
||||
@@ -1001,11 +966,7 @@ void NACT_Sys2::cmd_j()
|
||||
int p1 = cali();
|
||||
int p2 = cali();
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\nJ %d,%d:", p1, p2);
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\nJ %d,%d:", p1, p2);
|
||||
}
|
||||
|
||||
void NACT_Sys2::cmd_k()
|
||||
@@ -1018,20 +979,15 @@ void NACT_Sys2::cmd_l()
|
||||
{
|
||||
int index = getd();
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\nL %d:", index);
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\nL %d:", index);
|
||||
|
||||
if(1 <= index && index <= 26) {
|
||||
// ASLEEP_A.DAT - ASLEEP_Z.DAT
|
||||
char path[_MAX_PATH];
|
||||
strcpy_s(path, _MAX_PATH, "ASLEEP_A.DAT");
|
||||
path[7] = 'A' + index - 1;
|
||||
char file_name[_MAX_PATH];
|
||||
sprintf_s(file_name, _MAX_PATH, "ASLEEP_%c.DAT", 'A' + index - 1);
|
||||
|
||||
FILEIO* fio = new FILEIO();
|
||||
if(fio->Fopen(path, FILEIO_READ_BINARY)) {
|
||||
if(fio->Fopen(file_name, FILEIO_READ_BINARY)) {
|
||||
fio->Fseek(112, FILEIO_SEEK_SET);
|
||||
|
||||
int next_page = fio->Fgetw() - 1;
|
||||
@@ -1122,7 +1078,7 @@ void NACT_Sys2::cmd_l()
|
||||
|
||||
void NACT_Sys2::cmd_m()
|
||||
{
|
||||
char string[22];
|
||||
char string[33];
|
||||
int d, p = 0;
|
||||
|
||||
while((d = getd()) != ':') {
|
||||
@@ -1136,14 +1092,10 @@ void NACT_Sys2::cmd_m()
|
||||
}
|
||||
string[p] = '\0';
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\nM %s:", string);
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\nM %s:", string);
|
||||
|
||||
if(1 <= tvar_index && tvar_index <= 10) {
|
||||
memcpy(tvar[tvar_index - 1], string, 22);
|
||||
memcpy(tvar[tvar_index - 1], string, 33);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1152,11 +1104,7 @@ void NACT_Sys2::cmd_n()
|
||||
int p1 = cali();
|
||||
int p2 = cali();
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\nN %d,%d:", p1, p2);
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\nN %d,%d:", p1, p2);
|
||||
}
|
||||
|
||||
void NACT_Sys2::cmd_o()
|
||||
@@ -1165,29 +1113,25 @@ void NACT_Sys2::cmd_o()
|
||||
int width = cali();
|
||||
int height = cali();
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\nO %d,%d,%d:", st, width, height);
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\nO %d,%d,%d:", st, width, height);
|
||||
|
||||
#if 0
|
||||
// white mesh
|
||||
int sx = (st % 80) * 8;
|
||||
int sy = (int)(st / 80);
|
||||
ags->draw_mesh(sx, sy, width, height);
|
||||
#endif
|
||||
}
|
||||
|
||||
void NACT_Sys2::cmd_p()
|
||||
{
|
||||
int param = getd();
|
||||
|
||||
ags->text_font_color = (uint8)((param & 0x7) + 16);
|
||||
if(crc32_a != CRC32_YAKATA2 && crc32_a != CRC32_DALK_HINT && crc32_a != CRC32_RANCE3_HINT) {
|
||||
ags->text_font_color = (uint8)((param & 0x7) + 16);
|
||||
}
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\nP %d:", param);
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\nP %d:", param);
|
||||
}
|
||||
|
||||
#define FWRITE(data, size) { \
|
||||
@@ -1214,20 +1158,15 @@ void NACT_Sys2::cmd_q()
|
||||
|
||||
int index = getd();
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\nQ %d:", index);
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\nQ %d:", index);
|
||||
|
||||
if(1 <= index && index <= 26) {
|
||||
// ASLEEP_A.DAT - ASLEEP_Z.DAT
|
||||
char path[_MAX_PATH];
|
||||
strcpy_s(path, _MAX_PATH, "ASLEEP_A.DAT");
|
||||
path[7] = 'A' + index - 1;
|
||||
char file_name[_MAX_PATH];
|
||||
sprintf_s(file_name, _MAX_PATH, "ASLEEP_%c.DAT", 'A' + index - 1);
|
||||
|
||||
FILEIO* fio = new FILEIO();
|
||||
if(fio->Fopen(path, FILEIO_WRITE_BINARY)) {
|
||||
if(fio->Fopen(file_name, FILEIO_WRITE_BINARY)) {
|
||||
uint8 buffer[9510];
|
||||
int p = 0;
|
||||
|
||||
@@ -1295,11 +1234,7 @@ void NACT_Sys2::cmd_q()
|
||||
|
||||
void NACT_Sys2::cmd_r()
|
||||
{
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "R\n");
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("R\n");
|
||||
|
||||
// ウィンドウの表示範囲外の場合は改ページ
|
||||
if(ags->return_text_line(text_window)) {
|
||||
@@ -1311,11 +1246,7 @@ void NACT_Sys2::cmd_s()
|
||||
{
|
||||
int page = getd();
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\nS %d:", page);
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\nS %d:", page);
|
||||
|
||||
if(page) {
|
||||
mako->play_music(page);
|
||||
@@ -1330,62 +1261,86 @@ void NACT_Sys2::cmd_t()
|
||||
int p2 = cali();
|
||||
int p3 = cali();
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\nT %d,%d,%d:", p1, p2, p3);
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\nT %d,%d,%d:", p1, p2, p3);
|
||||
}
|
||||
|
||||
void NACT_Sys2::cmd_u()
|
||||
{
|
||||
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(crc32_a == CRC32_YAKATA2) {
|
||||
page = cali();
|
||||
transparent = cali();
|
||||
} else {
|
||||
page = getd();
|
||||
transparent = getd();
|
||||
}
|
||||
|
||||
output_console("\nU %d,%d:", page, transparent);
|
||||
|
||||
ags->load_cg(page, transparent);
|
||||
}
|
||||
|
||||
void NACT_Sys2::cmd_v()
|
||||
{
|
||||
#if 1
|
||||
int p01 = cali();
|
||||
int p02 = cali();
|
||||
int p03 = cali();
|
||||
int p04 = cali();
|
||||
int p05 = cali();
|
||||
int p06 = cali();
|
||||
int p07 = cali();
|
||||
int p08 = cali();
|
||||
int p09 = cali();
|
||||
int p10 = cali();
|
||||
int p11 = cali();
|
||||
int p12 = cali();
|
||||
int p13 = cali();
|
||||
int p14 = cali();
|
||||
int p15 = cali();
|
||||
int p16 = cali();
|
||||
int p17 = cali();
|
||||
int p18 = cali();
|
||||
int p19 = cali();
|
||||
int p20 = cali();
|
||||
int p21 = cali();
|
||||
int p22 = cali();
|
||||
int p23 = cali();
|
||||
int p24 = cali();
|
||||
int p25 = cali();
|
||||
int p26 = cali();
|
||||
int p27 = cali();
|
||||
int p28 = cali();
|
||||
int p29 = cali();
|
||||
|
||||
output_console("\nV %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d:",
|
||||
p01, p02, p03, p04, p05, p06, p07, p08, p09, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29);
|
||||
#else
|
||||
int p1 = cali();
|
||||
int p2 = cali();
|
||||
|
||||
#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_Sys2::cmd_w()
|
||||
{
|
||||
int p1 = cali();
|
||||
int p2 = cali();
|
||||
int p3 = cali();
|
||||
int p4 = cali();
|
||||
int sx = cali();
|
||||
int sy = cali();
|
||||
int ex = cali();
|
||||
int ey = cali();
|
||||
|
||||
#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_Sys2::cmd_x()
|
||||
{
|
||||
int index = getd();
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\nX %d:", index);
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\nX %d:", index);
|
||||
|
||||
if(1 <= index && index <= 10) {
|
||||
ags->draw_text(tvar[index - 1]);
|
||||
@@ -1397,11 +1352,7 @@ void NACT_Sys2::cmd_y()
|
||||
int cmd = cali();
|
||||
int param = cali();
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\nY %d,%d:", cmd, param);
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\nY %d,%d:", cmd, param);
|
||||
|
||||
switch(cmd) {
|
||||
case 1:
|
||||
@@ -1444,7 +1395,7 @@ void NACT_Sys2::cmd_y()
|
||||
RND = (param == 0 || param == 1) ? 0 : random(param);
|
||||
break;
|
||||
case 7:
|
||||
if(crc32 != CRC32_SDPS_MARIA) {
|
||||
if(!(crc32_a == CRC32_SDPS && crc32_b == CRC32_SDPS_MARIA)) {
|
||||
ags->draw_box(param);
|
||||
}
|
||||
break;
|
||||
@@ -1460,10 +1411,18 @@ void NACT_Sys2::cmd_y()
|
||||
case 26:
|
||||
ags->text_font_size = (param == 1) ? 16 : (param == 2) ? 24 : (param == 3) ? 32 : (param == 4) ? 48 : (param == 5) ? 64 : 16;
|
||||
break;
|
||||
#if 0 // Broken in Super D.P.S
|
||||
case 27:
|
||||
{
|
||||
int tmp = tvar_index;
|
||||
tvar_index = param;
|
||||
tvar_maxlen = 8;//param;
|
||||
text_dialog();
|
||||
tvar_index = tmp;
|
||||
}
|
||||
break;
|
||||
case 40:
|
||||
case 42:
|
||||
{
|
||||
if(ags->now_fade()) {
|
||||
Uint32 dwStart = SDL_GetTicks();
|
||||
for(int i = 0; i < 16; i++) {
|
||||
ags->fade_in(i);
|
||||
@@ -1478,11 +1437,13 @@ void NACT_Sys2::cmd_y()
|
||||
SDL_Delay(0);
|
||||
}
|
||||
}
|
||||
ags->fade_end();
|
||||
}
|
||||
break;
|
||||
case 41:
|
||||
case 43:
|
||||
{
|
||||
if(!ags->now_fade()) {
|
||||
ags->fade_start();
|
||||
Uint32 dwStart = SDL_GetTicks();
|
||||
for(int i = 0; i < 16; i++) {
|
||||
ags->fade_out(i, (cmd == 41) ? false : true);
|
||||
@@ -1499,7 +1460,6 @@ void NACT_Sys2::cmd_y()
|
||||
}
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
case 221:
|
||||
case 222:
|
||||
case 223:
|
||||
@@ -1530,6 +1490,28 @@ void NACT_Sys2::cmd_y()
|
||||
case 252:
|
||||
RND = 8;
|
||||
break;
|
||||
case 253:
|
||||
// キーが押されて離されるまで待機
|
||||
for(;;) {
|
||||
if(terminate) {
|
||||
return;
|
||||
}
|
||||
if(get_key()) {
|
||||
break;
|
||||
}
|
||||
SDL_Delay(10);
|
||||
}
|
||||
SDL_Delay(100);
|
||||
for(;;) {
|
||||
if(terminate) {
|
||||
return;
|
||||
}
|
||||
if(!(get_key() & 0x18)) {
|
||||
break;
|
||||
}
|
||||
SDL_Delay(10);
|
||||
}
|
||||
break;
|
||||
case 254:
|
||||
RND = 0;
|
||||
break;
|
||||
@@ -1560,11 +1542,7 @@ void NACT_Sys2::cmd_z()
|
||||
int cmd = cali();
|
||||
int param = cali();
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\nZ %d,%d:", cmd, param);
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\nZ %d,%d:", cmd, param);
|
||||
|
||||
// Z1
|
||||
// Z2
|
||||
|
||||
+82
-239
@@ -13,8 +13,8 @@
|
||||
#include "../fileio.h"
|
||||
#include "texthook.h"
|
||||
|
||||
NACT_Sys3::NACT_Sys3(uint32 crc32, const char* font_file, const char* playlist)
|
||||
: NACT(3, crc32, font_file, playlist)
|
||||
NACT_Sys3::NACT_Sys3(uint32 crc32_a, uint32 crc32_b, const char* font_file, const char* playlist)
|
||||
: NACT(3, crc32_a, crc32_b, font_file, playlist)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -28,11 +28,7 @@ void NACT_Sys3::cmd_calc()
|
||||
}
|
||||
var[index] = cali();
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\n!var[%d]:%d!", index, var[index]);
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\n!var[%d]:%d!", index, var[index]);
|
||||
}
|
||||
|
||||
void NACT_Sys3::cmd_branch()
|
||||
@@ -44,11 +40,7 @@ void NACT_Sys3::cmd_branch()
|
||||
// sigmarion3 最適化誤爆の対策
|
||||
scenario_addr = condition ? t_addr : f_addr;
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\n{%d: T:%4x, F:%4x", condition, t_addr, f_addr);
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\n{%d: T:%4x, F:%4x", condition, t_addr, f_addr);
|
||||
}
|
||||
|
||||
void NACT_Sys3::cmd_label_jump()
|
||||
@@ -56,22 +48,14 @@ void NACT_Sys3::cmd_label_jump()
|
||||
int next_addr = getw();
|
||||
scenario_addr = next_addr;
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\n@%x:", next_addr);
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\n@%x:", next_addr);
|
||||
}
|
||||
|
||||
void NACT_Sys3::cmd_label_call()
|
||||
{
|
||||
int next_addr = getw();
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\n\\%x:", next_addr);
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\n\\%x:", next_addr);
|
||||
|
||||
if(next_addr == 0) {
|
||||
// リターン
|
||||
@@ -93,22 +77,14 @@ void NACT_Sys3::cmd_page_jump()
|
||||
scenario_page = next_page;
|
||||
scenario_addr = 2;
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\n&%d:", next_page);
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\n&%d:", next_page);
|
||||
}
|
||||
|
||||
void NACT_Sys3::cmd_page_call()
|
||||
{
|
||||
int next_page = cali(), next_addr;
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\n%%%d:", next_page);
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\n%%%d:", next_page);
|
||||
|
||||
if(next_page == 0) {
|
||||
// リターン
|
||||
@@ -135,11 +111,7 @@ void NACT_Sys3::cmd_set_menu()
|
||||
ags->menu_dest_y += ags->menu_font_size + 2;
|
||||
ags->draw_menu = false;
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "$");
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("$");
|
||||
} else {
|
||||
if(!menu_index) {
|
||||
ags->clear_menu_window();
|
||||
@@ -150,31 +122,14 @@ void NACT_Sys3::cmd_set_menu()
|
||||
ags->menu_dest_y += 2;
|
||||
ags->draw_menu = true;
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\n$%x,", menu_addr[menu_index - 1]);
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\n$%x,", menu_addr[menu_index - 1]);
|
||||
}
|
||||
}
|
||||
|
||||
int NACT_Sys3::menu_select(int num_items)
|
||||
{
|
||||
// クリック中の間は待機
|
||||
for(;;) {
|
||||
if(terminate) {
|
||||
return -1;
|
||||
}
|
||||
// if(get_key() != 32) {
|
||||
if(!get_key()) {
|
||||
break;
|
||||
}
|
||||
SDL_Delay(16);
|
||||
}
|
||||
|
||||
// メニュー表示
|
||||
ags->open_menu_window(menu_window);
|
||||
int current_index = 0;
|
||||
|
||||
// マウス移動
|
||||
int sx = ags->menu_w[menu_window - 1].sx;
|
||||
@@ -183,12 +138,13 @@ int NACT_Sys3::menu_select(int num_items)
|
||||
int mx = ex - 16;
|
||||
int my = sy + 10;
|
||||
int height = ags->menu_font_size + 4;
|
||||
set_cursor(mx, my);
|
||||
int current_index = 0;
|
||||
|
||||
bool selectable = true;
|
||||
set_cursor(mx, my);
|
||||
wait_after_open_menu();
|
||||
|
||||
// メニュー選択
|
||||
for(;;) {
|
||||
for(bool selectable = true;;) {
|
||||
// 入力待機
|
||||
int val = 0, current_mx = mx, current_my = my;
|
||||
for(;;) {
|
||||
@@ -200,7 +156,7 @@ int NACT_Sys3::menu_select(int num_items)
|
||||
int dy = my - current_my;
|
||||
if (dx*dx + dy*dy > 10)
|
||||
break;
|
||||
if((val = get_key())) {
|
||||
if((val = get_key()) != 0) {
|
||||
SDL_Delay(100);
|
||||
break;
|
||||
}
|
||||
@@ -260,11 +216,7 @@ int NACT_Sys3::menu_select(int num_items)
|
||||
|
||||
void NACT_Sys3::cmd_open_menu()
|
||||
{
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\n]");
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\n]");
|
||||
|
||||
if(!menu_index) {
|
||||
scenario_addr = scenario_data[0] | (scenario_data[1] << 8);
|
||||
@@ -292,11 +244,7 @@ void NACT_Sys3::cmd_set_verbobj()
|
||||
menu_obj[menu_index++] = obj;
|
||||
verb_obj = true;
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\n[%x,%s,%s:", addr, caption_verb[verb], caption_obj[obj]);
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\n[%x,%s,%s:", addr, caption_verb[verb], caption_obj[obj]);
|
||||
}
|
||||
|
||||
void NACT_Sys3::cmd_set_verbobj2()
|
||||
@@ -313,21 +261,13 @@ void NACT_Sys3::cmd_set_verbobj2()
|
||||
}
|
||||
verb_obj = true;
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\n:%d,%x,%s,%s:", condition, addr, caption_verb[verb], caption_obj[obj]);
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\n:%d,%x,%s,%s:", condition, addr, caption_verb[verb], caption_obj[obj]);
|
||||
}
|
||||
|
||||
void NACT_Sys3::cmd_open_verb()
|
||||
{
|
||||
// 動詞メニューの表示
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\nopen verb-obj menu");
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\nopen verb-obj menu");
|
||||
verb_obj = false;
|
||||
|
||||
// 表示する動詞のチェック
|
||||
@@ -431,11 +371,7 @@ void NACT_Sys3::cmd_a()
|
||||
{
|
||||
texthook_nextpage();
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "A\n");
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("A\n");
|
||||
|
||||
if(!text_skip_enb) {
|
||||
// Pushマークの表示
|
||||
@@ -479,18 +415,13 @@ void NACT_Sys3::cmd_b()
|
||||
int p4 = cali();
|
||||
int p5 = cali();
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\nB %d,%d,%d,%d,%d,%d,%d:", cmd, index, p1, p2, p3, p4, p5);
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\nB %d,%d,%d,%d,%d,%d,%d:", cmd, index, p1, p2, p3, p4, p5);
|
||||
|
||||
if(cmd == 1) {
|
||||
// あゆみちゃん物語
|
||||
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;
|
||||
@@ -525,7 +456,7 @@ void NACT_Sys3::cmd_b()
|
||||
} else if(cmd == 4) {
|
||||
if(p5 == 0) {
|
||||
// ウィンドウ退避
|
||||
if(crc32 == CRC32_PROSTUDENTG_CD && p4) {
|
||||
if(crc32_a == CRC32_PROSTUDENTG_CD && p4) {
|
||||
// prostudent G オープニング画面化け対策
|
||||
if(ags->text_w[index - 1].window) {
|
||||
free(ags->text_w[index - 1].window);
|
||||
@@ -545,6 +476,7 @@ void NACT_Sys3::cmd_b()
|
||||
void NACT_Sys3::cmd_d()
|
||||
{
|
||||
// 未使用
|
||||
fatal("Unknown Command: 'D' at page = %d, addr = %d", scenario_page, prev_addr);
|
||||
}
|
||||
|
||||
void NACT_Sys3::cmd_e()
|
||||
@@ -556,11 +488,7 @@ void NACT_Sys3::cmd_e()
|
||||
int ex = cali();
|
||||
int ey = cali();
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\nE %d,%d,%d,%d,%d,%d:", index, color, sx, sy, ex, ey);
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\nE %d,%d,%d,%d,%d,%d:", index, color, sx, sy, ex, ey);
|
||||
|
||||
ags->box[index - 1].color = color;
|
||||
ags->box[index - 1].sx = column ? sx * 8 : sx;
|
||||
@@ -571,11 +499,7 @@ void NACT_Sys3::cmd_e()
|
||||
|
||||
void NACT_Sys3::cmd_f()
|
||||
{
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\nF");
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\nF");
|
||||
|
||||
scenario_addr = 2;
|
||||
}
|
||||
@@ -584,11 +508,7 @@ void NACT_Sys3::cmd_g()
|
||||
{
|
||||
int page = cali();
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\nG %d:", page);
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\nG %d:", page);
|
||||
|
||||
ags->load_cg(page, -1);
|
||||
}
|
||||
@@ -598,11 +518,7 @@ void NACT_Sys3::cmd_h()
|
||||
int length = getd();
|
||||
int val = cali();
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\nH %d,%d:", length, val);
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\nH %d,%d:", length, val);
|
||||
|
||||
// 隠しコマンド?
|
||||
if(length >= 9) {
|
||||
@@ -653,15 +569,11 @@ void NACT_Sys3::cmd_i()
|
||||
int dx = cali();
|
||||
int dy = cali();
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\nI %d,%d,%d,%d,%d,%d:", sx, sy, ex, ey, dx, dy);
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\nI %d,%d,%d,%d,%d,%d:", sx, sy, ex, ey, dx, dy);
|
||||
|
||||
// X方向はカラム単位で切り捨て
|
||||
sx = column ? sx * 8 : sx & 0xfff8;
|
||||
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);
|
||||
}
|
||||
@@ -671,11 +583,7 @@ void NACT_Sys3::cmd_j()
|
||||
int x = cali();
|
||||
int y = cali();
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\nJ %d,%d:", x, y);
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\nJ %d,%d:", x, y);
|
||||
|
||||
// x方向はカラム単位で切り捨て
|
||||
ags->cg_dest_x = column ? x * 8 : x & 0xfff8;
|
||||
@@ -687,11 +595,7 @@ void NACT_Sys3::cmd_k()
|
||||
{
|
||||
int cmd = getd(), val;
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\nK %d:", cmd);
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\nK %d:", cmd);
|
||||
|
||||
// K6の場合は、すぐに返る
|
||||
if(cmd == 6) {
|
||||
@@ -708,7 +612,7 @@ void NACT_Sys3::cmd_k()
|
||||
if(terminate) {
|
||||
return;
|
||||
}
|
||||
if((val = get_key())) {
|
||||
if((val = get_key()) != 0) {
|
||||
break;
|
||||
}
|
||||
if(1 <= cmd && cmd <= 3) {
|
||||
@@ -764,11 +668,7 @@ void NACT_Sys3::cmd_l()
|
||||
{
|
||||
int index = cali();
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\nL %d:", index);
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\nL %d:", index);
|
||||
|
||||
if(index == 0) {
|
||||
// 特殊セーブ
|
||||
@@ -787,12 +687,11 @@ void NACT_Sys3::cmd_l()
|
||||
delete fio;
|
||||
} else if(1 <= index && index <= 26) {
|
||||
// ASLEEP_A.DAT - ASLEEP_Z.DAT
|
||||
char path[_MAX_PATH];
|
||||
strcpy_s(path, _MAX_PATH, "ASLEEP_A.DAT");
|
||||
path[7] = 'A' + index - 1;
|
||||
char file_name[_MAX_PATH];
|
||||
sprintf_s(file_name, _MAX_PATH, "ASLEEP_%c.DAT", 'A' + index - 1);
|
||||
|
||||
FILEIO* fio = new FILEIO();
|
||||
if(fio->Fopen(path, FILEIO_READ_BINARY | FILEIO_SAVEDATA)) {
|
||||
if(fio->Fopen(file_name, FILEIO_READ_BINARY | FILEIO_SAVEDATA)) {
|
||||
fio->Fseek(112, FILEIO_SEEK_SET);
|
||||
|
||||
int next_page = fio->Fgetw() - 1;
|
||||
@@ -880,12 +779,11 @@ void NACT_Sys3::cmd_l()
|
||||
delete fio;
|
||||
} else if(101 <= index && index <= 126) {
|
||||
// ASLEEP_A.DAT - ASLEEP_Z.DAT
|
||||
char path[_MAX_PATH];
|
||||
strcpy_s(path, _MAX_PATH, "ASLEEP_A.DAT");
|
||||
path[7] = 'A' + index - 101;
|
||||
char file_name[_MAX_PATH];
|
||||
sprintf_s(file_name, _MAX_PATH, "ASLEEP_%c.DAT", 'A' + index - 101);
|
||||
|
||||
FILEIO* fio = new FILEIO();
|
||||
if(fio->Fopen(path, FILEIO_READ_BINARY | FILEIO_SAVEDATA)) {
|
||||
if(fio->Fopen(file_name, FILEIO_READ_BINARY | FILEIO_SAVEDATA)) {
|
||||
fio->Fseek(112 + 16, FILEIO_SEEK_SET);
|
||||
var[0] = fio->Fgetw();
|
||||
fio->Fclose();
|
||||
@@ -910,11 +808,7 @@ void NACT_Sys3::cmd_m()
|
||||
}
|
||||
string[p] = '\0';
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\nM %s:", string);
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\nM %s:", string);
|
||||
|
||||
if(1 <= tvar_index && tvar_index <= 10) {
|
||||
memcpy(tvar[tvar_index - 1], string, 22);
|
||||
@@ -935,11 +829,7 @@ void NACT_Sys3::cmd_n()
|
||||
int src = cali();
|
||||
int dest = cali();
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\nN %d,%d,%d:", cmd, src, dest);
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\nN %d,%d,%d:", cmd, src, dest);
|
||||
}
|
||||
|
||||
void NACT_Sys3::cmd_o()
|
||||
@@ -964,11 +854,7 @@ void NACT_Sys3::cmd_o()
|
||||
B15 = (val & 0x4000) ? 1 : 0;
|
||||
B16 = (val & 0x8000) ? 1 : 0;
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\nO %d,%d:", cmd, val);
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\nO %d,%d:", cmd, val);
|
||||
} else {
|
||||
uint16 val = 0;
|
||||
val |= B01 ? 0x0001 : 0;
|
||||
@@ -990,11 +876,7 @@ void NACT_Sys3::cmd_o()
|
||||
int index = cali2();
|
||||
var[index] = val;
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\nO %d,var[%d]:", cmd, index);
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\nO %d,var[%d]:", cmd, index);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1005,11 +887,7 @@ void NACT_Sys3::cmd_p()
|
||||
int g = cali();
|
||||
int b = cali();
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\nP %d,%d,%d,%d:", index, r, g, b);
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\nP %d,%d,%d,%d:", index, r, g, b);
|
||||
|
||||
ags->set_palette(index, r, g, b);
|
||||
set_palette = true;
|
||||
@@ -1051,11 +929,7 @@ void NACT_Sys3::cmd_q()
|
||||
|
||||
int index = cali();
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\nQ %d:", index);
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\nQ %d:", index);
|
||||
|
||||
if(index == 0) {
|
||||
// 特殊セーブ
|
||||
@@ -1074,12 +948,11 @@ void NACT_Sys3::cmd_q()
|
||||
delete fio;
|
||||
} else if(1 <= index && index <= 26) {
|
||||
// ASLEEP_A.DAT - ASLEEP_Z.DAT
|
||||
char path[_MAX_PATH];
|
||||
strcpy_s(path, _MAX_PATH, "ASLEEP_A.DAT");
|
||||
path[7] = 'A' + index - 1;
|
||||
char file_name[_MAX_PATH];
|
||||
sprintf_s(file_name, _MAX_PATH, "ASLEEP_%c.DAT", 'A' + index - 1);
|
||||
|
||||
FILEIO* fio = new FILEIO();
|
||||
if(fio->Fopen(path, FILEIO_WRITE_BINARY | FILEIO_SAVEDATA)) {
|
||||
if(fio->Fopen(file_name, FILEIO_WRITE_BINARY | FILEIO_SAVEDATA)) {
|
||||
uint8 buffer[9510];
|
||||
int p = 0;
|
||||
|
||||
@@ -1149,11 +1022,7 @@ void NACT_Sys3::cmd_r()
|
||||
{
|
||||
texthook_newline();
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "R\n");
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("R\n");
|
||||
|
||||
// ウィンドウの表示範囲外の場合は改ページ
|
||||
if(ags->return_text_line(text_window)) {
|
||||
@@ -1165,11 +1034,7 @@ void NACT_Sys3::cmd_s()
|
||||
{
|
||||
int page = getd();
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\nS %d:", page);
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\nS %d:", page);
|
||||
|
||||
if(page) {
|
||||
mako->play_music(page);
|
||||
@@ -1183,11 +1048,7 @@ void NACT_Sys3::cmd_t()
|
||||
int x = cali();
|
||||
int y = cali();
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\nT %d,%d:", x, y);
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\nT %d,%d:", x, y);
|
||||
|
||||
// x方向はカラム単位で切り捨て
|
||||
ags->text_dest_x = column ? x * 8 : x & 0xfff8;
|
||||
@@ -1199,13 +1060,9 @@ void NACT_Sys3::cmd_u()
|
||||
int page = cali();
|
||||
int transparent = cali();
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\nU %d,%d:", page, transparent);
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\nU %d,%d:", page, transparent);
|
||||
|
||||
if(crc32 == CRC32_RANCE41 || crc32 == CRC32_RANCE42) {
|
||||
if(crc32_a == CRC32_RANCE41 || crc32_a == CRC32_RANCE42) {
|
||||
transparent = (transparent == 28) ? 12 : transparent;
|
||||
}
|
||||
ags->load_cg(page, transparent);
|
||||
@@ -1216,11 +1073,7 @@ void NACT_Sys3::cmd_v()
|
||||
int cmd = cali();
|
||||
int index = cali();
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\nV %d,%d:", cmd, index);
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\nV %d,%d:", cmd, index);
|
||||
|
||||
if(cmd == 0) {
|
||||
for(int i = 0; i < 20; i++) {
|
||||
@@ -1245,11 +1098,7 @@ void NACT_Sys3::cmd_w()
|
||||
int y = cali();
|
||||
uint8 color = (uint8)cali();
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\nW %d,%d,%d", x, y, color);
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\nW %d,%d,%d", x, y, color);
|
||||
|
||||
ags->paint(x, y, color);
|
||||
}
|
||||
@@ -1258,11 +1107,7 @@ void NACT_Sys3::cmd_x()
|
||||
{
|
||||
int index = getd();
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\nX %d:", index);
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\nX %d:", index);
|
||||
|
||||
if(1 <= index && index <= 10) {
|
||||
ags->draw_text(tvar[index - 1]);
|
||||
@@ -1274,11 +1119,7 @@ void NACT_Sys3::cmd_y()
|
||||
int cmd = cali();
|
||||
int param = cali();
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\nY %d,%d:", cmd, param);
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\nY %d,%d:", cmd, param);
|
||||
|
||||
switch(cmd) {
|
||||
case 1:
|
||||
@@ -1559,7 +1400,7 @@ void NACT_Sys3::cmd_y()
|
||||
case 231:
|
||||
D01 = 640;
|
||||
D02 = (param == 1) ? ags->screen_height : 480;
|
||||
D03 = (crc32 == CRC32_YAKATA3_FD) ? 16 : 256;
|
||||
D03 = (crc32_a == CRC32_YAKATA3_FD) ? 16 : 256;
|
||||
break;
|
||||
case 232:
|
||||
if(ags->screen_height != param ? 480 : 400) {
|
||||
@@ -1595,13 +1436,12 @@ void NACT_Sys3::cmd_y()
|
||||
}
|
||||
break;
|
||||
case 239:
|
||||
{
|
||||
char path[_MAX_PATH];
|
||||
strcpy_s(path, _MAX_PATH, "ASLEEP_A.DAT");
|
||||
path[7] = 'A' + param - 1;
|
||||
if(1 <= param && param <= 26) {
|
||||
char file_name[_MAX_PATH];
|
||||
sprintf_s(file_name, _MAX_PATH, "ASLEEP_%c.DAT", 'A' + param - 1);
|
||||
|
||||
struct stat statbuf;
|
||||
if (FILEIO::StatSavedata(path, &statbuf) != -1) {
|
||||
if (FILEIO::StatSavedata(file_name, &statbuf) != -1) {
|
||||
struct tm *t = localtime(&statbuf.st_mtime);
|
||||
D01 = t->tm_year + 1900;
|
||||
D02 = t->tm_mon + 1;
|
||||
@@ -1612,6 +1452,9 @@ void NACT_Sys3::cmd_y()
|
||||
} else {
|
||||
D01 = D02 = D03 = D04 = D05 = D06 = 0;
|
||||
}
|
||||
} else {
|
||||
// 不正なファイル番号
|
||||
D01 = D02 = D03 = D04 = D05 = D06 = 0;
|
||||
}
|
||||
break;
|
||||
case 240:
|
||||
@@ -1620,33 +1463,37 @@ void NACT_Sys3::cmd_y()
|
||||
case 241:
|
||||
break;
|
||||
case 250:
|
||||
{
|
||||
#if 0
|
||||
char path[4];
|
||||
path[0] = g_root[0];
|
||||
path[1] = ':';
|
||||
path[2] = '\\';
|
||||
path[3] = '\0';
|
||||
UINT t = GetDriveType(path);
|
||||
if(FILEIO::GetRootPath()[1] == ':') {␍
|
||||
_TCHAR root_path[4];
|
||||
root_path[0] = FILEIO::GetRootPath()[0];
|
||||
root_path[1] = ':';
|
||||
root_path[2] = '\\';
|
||||
root_path[3] = '\0';
|
||||
|
||||
UINT t = GetDriveType(root_path);
|
||||
// フロッピーから起動した場合は0が返る
|
||||
//RND = (t == DRIVE_REMOVABLE) ? 0 : (t == DRIVE_CDROM) ? 2 : 1;
|
||||
RND = (t == DRIVE_CDROM) ? 2 : 1;
|
||||
#else
|
||||
} else {
|
||||
// ネットワークドライブ?
|
||||
RND = 1;
|
||||
#endif
|
||||
}
|
||||
#else
|
||||
RND = 1;
|
||||
#endif
|
||||
break;
|
||||
case 251:
|
||||
column = param ? false : true;
|
||||
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;
|
||||
@@ -1660,11 +1507,7 @@ void NACT_Sys3::cmd_z()
|
||||
int cmd = cali();
|
||||
int param = cali();
|
||||
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
char log[128];
|
||||
sprintf_s(log, 128, "\nZ %d,%d:", cmd, param);
|
||||
output_console(log);
|
||||
#endif
|
||||
output_console("\nZ %d,%d:", cmd, param);
|
||||
|
||||
if(cmd == 0) {
|
||||
ags->palette_bank = (uint8)(param & 0xff);
|
||||
|
||||
@@ -92,9 +92,13 @@ void NACT::release_console()
|
||||
#endif
|
||||
}
|
||||
|
||||
void NACT::output_console(char log[])
|
||||
void NACT::output_console(const char *format, ...)
|
||||
{
|
||||
#if defined(_DEBUG_CONSOLE)
|
||||
fputs(log, stdout);
|
||||
va_list ap;
|
||||
|
||||
va_start(ap, format);
|
||||
vfprintf(stdout, format, ap);
|
||||
va_end(ap);
|
||||
#endif
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user