ONScripter(メ インサイト、ミラーサ イト)とは、NScripter 用に作られたスクリプトを独自に解釈して実行す るプログラムです。
NScripterは高橋直樹氏が 開発されたゲーム実行エンジンであり、高橋氏のホームページからダウンロード できます。
ONScripter で何ができるのかについてはαβεさんの[ONScripter のスゝメ]を参照し てください。
現在はベータ版
onscripter-beta-20040119.tar.gz
を配布しております。
(一つ前のベータ版
onscripter-beta-20040105.tar.gz
)
バイナリパッケージ(ただし当方では動作チェックはしておりません)
更新内容については[開発日誌]を参照して下さい。
動作報告・バグ報告・機能追加要望・パッチは随時受け付けますので[バグトラッキングシステム]までお願いします。
「○○ゲームの××場面がなんかおかしい」という程度でも結構ですのでお気軽にどうぞ。
[ogapee@aqua.dti2.ne.jp]まで直接送っていただいても構いません。
下記のライブラリと処理系が必要です。バージョンは最新である必要はないかもしれませんが、他のバージョンでは確認していません。
当方では Windows, Linux, Zaurus(SL-5500,SL-C700)で動作確認をしています。
またMacOS Xおよび FreeBSD, Solaris(on SPARC), Zaurus(SL-A300,SL-B500), Dreamcast での動作報告をいただいております。
その他の多くの Unix 系 OS, BeOS, MacOS については上記のライブラリが対応しているため適切な Makefile を書けばコンパイル・実行できると思いますが、当方では確認できないので誰かやって下さい。
適当な場所に ONScripter を展開し、Linux の場合は make -f Makefile.Linux, Windows の場合は、nmake -f Makefile.Win とやって下さい。Windows の場合は、bzip2, SDL と SMPEG のヘッダファイルとライブラリのある場所を Makefile.Win で指定しているので、自身の環境に合わせて適宜修正してください。
[必須]まずゲームのアーカイブを一カ所にまとめます。通常は、スクリプト(0.txt もしくは nscript.dat)とアーカイブ(arc.sar もしくは arc.nsa)の2つのファイルがあれば十分なはずです。arc1.nsa 〜 arc9.nsa がある場合は、それも置いてください。またゲームによっては、アーカイブの外に一部の画像ファイルを置いていたりします。その場合は、それらのファイルも元と同じように置いてください。一番確実なのは、ディレクトリ毎全てのファイルをコピーしてくることです。
[必須]下記の"TrueType font による漢字表示について"を参考に、日本語 TrueType font を用意し、"default.ttf" という名前で置いてください。
[任意] CD audio の振り替え演奏をしたい場合は、下記の"CD audio 演奏の振り替えについて"に従って MP3 ファイルを用意してください。
[必須]最後に、ONScripter を実行してください。同じディレクトリにある nscript.dat とアーカイブを自動的に探し、ゲームが開始されます。なお ONScripter は、同じディレクトリにセーブデータやファイルログ等の状態ファイルを保存するため、このディレクトリには write permission を出しておいてください。
現在把握しており直す予定のバグ・未実装機能。先頭の文字は優先度。
お世話になっているページ、よく利用させていただいているページへのリンクです。
ONScripter は全ての操作をキーボードで行うことができます。下にショートカット一覧を書きます。ただし、スクリプトの方でショートカットキーを設定している場合は、そちらが優先されます。
キー | 説明 |
---|---|
space | マウスの左クリックと同じだが、下にボタンがあってもボタン外を押したことになる |
return | マウスの左クリックと同じ |
escape | マウスの右クリックと同じ |
p, ↑ | ボタン・文章選択時にマウスカーソルを前の選択肢に動かす |
n, ↓ | ボタン・文章選択時にマウスカーソルを次の選択肢に動かす |
s, ← | 次の選択肢まで飛ばすモードに切り替え |
o, → | 1ページ表示をするかしないかの切り替え |
f | Full screen mode と Window mode の切り替え |
a | automode もしくは mode_ext が設定されている場合に、読み上げモードに入る |
z | --edit オプションを指定して起動したときに、音量及び変数変更モードに入る |
1, 2, 3 | 文字の描画速度を変更 |
Shift + q | 終了(end コマンドを発行) |
ただし、s 以外のキーは入力待ちの時しか受け付けません(文字を描画している最中は受け付けません)。次の選択肢まで飛ばしている最中に限り、任意のタイミングで s キーにより通常の状態に戻すことができます。
また、コンソール画面で Ctl-c することで ONScripter を終了できます。その場合、グローバル変数等は保存されるので、終了する場合はゲームのメニューから終了するか、これで強制終了するかしてください。
以下に示すオプションを指定できます。ただし、オプション無しがデフォルト動作です。
オプション | 説明 |
---|---|
-h,--help | へルプを表示して終了します。 |
-v,--version | バージョンを表示して終了します。 |
--cdaudio | CD Audio 演奏モードに変更します。CD Audio が使えなかったとしても MP3 ファイルは使用しません。 |
-f,--font file | 使用するフォントの path を指定します。 |
--registry file | 使用する registry file を指定します。 |
--dll file | 使用する dll file を指定します。 |
-r,--root path | 使用するゲームファイルのあるディレクトリを指定します。 |
--force-button-shortcut | getenter と useescspc のコマンドを無視します。つまり、マウスのクリックを強制的に esc, space, return キーに割り付けます。 |
--disable-rescale | -DPDA を付けてコンパイルした ONScripter で、画像の解像度を PDA 用に落としたアーカイブを使用する場合は、このオプションを設定してください。ONScripter 内で解像度を 320x240 用に変換することを抑制します。 |
--edit | z キーを押したときに、音量及び変数の編集モードに入れるようになります。 |
例えば家では Windows、通勤中は Zaurus、職場では Linux といったよう に、同じゲームを別々のプラットフォーム上で同時に進行させるための方法を 書きます。基本的には、それぞれの環境にゲームのアーカイブをセットアップ し、プラットフォームを移る度に ONScripter(もしくは NScripter) の書き出 すファイルを全てコピーすれば良いのですが、注意点があります。
NScripter もしくは ONScripter が書き出すファイルには次のものがあり ます。この内一部のファイルはゲームによっては書き出されませんので、無い 場合もあります。
ファイル | 説明 |
---|---|
archive_path/gloval.sav | グローバル変数の格納 |
archive_path/envdata | 環境変数の格納 |
archive_path/kidoku.dat | 既読テキスト情報の格納 |
archive_path/NScrflog.dat | 既読ファイル情報の格納 |
archive_path/NScrllog.dat | 既読ラベル情報の格納 |
archive_path/save*.dat | セーブファイル(ONScripter の出力したものは ONScripter 専用です、NScripter が出力したものは NScripter でも ONScripter でも読み込めます) |
archive_path/sav/save*.dat | 上段の NScripter が出力するものと互換性のあるもの(無保証)で、ONScripter が出力します |
archive_path/その他画像ファイル | スクリーンショットを画像ファイルとして保存している場合があります。これはゲームによって場所や名前が異なるので、ゲーム毎に対応してください。 |
getreg コマンドは Windows の registry から指定されたデータを取得し ます。ONScripter では、テキストファイル registry.txt にデータを記述し、 これを読み込むことでこの機能を実現します。
registry.txt の書式は次の通りです。大文字・小文字は区別されます。ま た余計なスペース等を入れないようにして下さい。漢字が使われている場合、 文字コードが Shift JIS になることに注意してください。
[getreg の2番目の引数(ただし前後の""は除く)] getreg の3番目の引数(前後の""は必要です)=比較対象文字列(前後の""は必要です)registry.txt の例
[software\StudioOGA\ONScripter] "INSTALL"="FULL" [software\StudioOGA\のまど] "Download log file"="c:\nomad_down.log" "Upload log file"="c:\nomad_up.log"
ONScripter 起動時に --registry オプションを指定することで、 registry.txt を一カ所にまとめておくことができます。--registry を指定し ない場合は、現在のディレクトリの registry.txt を読みにいきます。
exec_dll コマンドは Windows 上で実行可能な DLL (Dynamic Link Library) を実行します。ONScripter では、テキストファイル dll.txt に DLL 名とその戻値の対応を記述し、これを読み込むことでこの機能を実現しま す。従って、実際に DLL が実行されるわけではなく、また戻値は固定になり ます。
dll.txt の書式は次の通りです。大文字・小文字は区別されます。また余 計なスペース等を入れないようにして下さい。漢字が使われている場合、文字 コードが Shift JIS になることに注意してください。
[dll 名] str = "文字列(getret で受け取ることのできる文字列戻値))" ret = 整数(getret で受け取ることのできる数字戻値)dll.txt の例
[test.dll] str = "山田/太郎/やまだ/たろう" ret = 1 [test2.dll] str = "StudioOGA" ret = 2
ONScripter 起動時に --dll オプションを指定することで、dll.txt を一 カ所にまとめておくことができます。--dll を指定しない場合は、現在のディ レクトリの dll.txt を読みにいきます。
これは暫定的なおまけ機能であり、今後変更されたり無くなったりする可能性があります。
ONScripter 起動時に --edit オプションを指定することで有効になります。
任意のキー入力待ち状態時に z キーを押すことで、編集モードに入ります。この時、title bar に
[EDIT MODE] MP3 vol (m) SE vol (s) Voice vol (v) Numeric variable (n)と表示されるはずです。この状態で、m, s, v, n のいずれかのキーを押すこ とで、それぞれの値を変更するサブモードに入ります。また、Esc キーを押す ことによってモードを抜けることができます。
数字変数の場合は、値変更の前にどの変数を変更するのかを選択します。
値変更サブモードでは、0 から 9 までの数字と -, BackSpace, Esc, リター ンキーが使えます。- キーは、対象が数字変数でかつ数字が0の時のみ有効に なります。既に数字が入力されている場合には、一旦 BackSpace で数字を全 部消してから - キーを押してください。
漢字を表示するためには、TrueType font を用意する必要があります。例えば Windows 2000 では \WinNT\Fonts の下に msgothic.ttc があり、またフリーの TreuType font として、kochi-gothic.ttf や wadalab-gothic.ttf があります。
ここで注意しなければいけないのは、TrueType font によっては正常に漢字表示ができないということです。この原因は FreeType library か SDL_ttf の制約だと思いますが、以下に私が試した5つのフォントについて書きます。
まとめると、UNICODE で記述されておりかつ embedded bitmap を使っていないフォント(上の例では HG ゴシックやみかちゃんフォント)が一番問題がなく、大きなフォントしか使わないゲームでは embedded bitmap が使用されていても使える(上の例では MSゴシックや東風ゴシック)といったところです。
ONScripter を起動する前に、使用する TreuType font ファイルを、default.ttf という名前にしてゲームのスクリプトがある場所のコピーしておいてください。
ゲームのスクリプトがある場所に cd というディレクトリを作り、そこに
cd/track01.mp3
cd/track02.mp3
cd/track03.mp3
...
cd/track14.mp3
...
という名前で MP3 ファイルを置きます。
すると、スクリプトで CD audio の1曲目を演奏するコマンドがあった場合に、対応する track01.mp3 を演奏するようになります。
MP3 を必ず用意する必要はなく、その場合は音が鳴らないだけです。
MIDI は SDL_mixer の機能を使って演奏します。
この時、現在のディレクトリに tmp.mid という一時ファイルを作ります。美しくないですが、SDL_mixer の MIDI 読み込み部がファイルからの読み込みしかサポートしていないためやむをえません。
Zaurus ( SL-5500, SL-A300, SL-B500, SL-C700 ) でプレイする場合は、画面の大きさが 320x240 になります。(SL-C700の場合は、VGA表示可能)。そこで、あらかじめアーカイブ中の画像ファイルを 320x240 に合うように小さくしておくことで、アーカイブサイズの減少を図ることができ、少ない記憶デバイスを有効活用することができます。なお、SPB 圧縮の画像は、後述の -e オプションを指定しない場合、BMP として格納されます。
画面のサイズが 640x480 で、拡張子が sar のアーカイブを 320x240 にする場合は、
> sarconv 640 arc.sar zaurus_dir/arc.sar ...
画面のサイズが 800x600 で、拡張子が nsa のアーカイブ(バージョン1)を 320x240 にする場合は、
> nsaconv [-e] 800 arc.nsa zaurus_dir/arc.nsa > nsaconv [-e] 800 arc1.nsa zaurus_dir/arc1.nsa ...
画面のサイズが 800x600 で、拡張子が nsa のアーカイブ(バージョン2)を 640x480 にする場合は、
> nsaconv [-e] -vga -ns2 800 arc.nsa zaurus_dir/arc.nsa > nsaconv [-e] -vga -ns2 800 arc1.nsa zaurus_dir/arc1.nsa ...
として変換してください。
最後の例は、-e オプション(後述)を指定したときに意味を持ちます。
NSA アーカイブのバージョン1と2と3の区別は手動です。スクリプトで ns2 コマンドが使われていればバージョン2、ns3 コマンドが使われていればバージョン3です。スクリプトが確認できない場合は、まず -ns2 を付けずに試し、うまくいかなかったら -ns2 もしくは -ns3 を付けて試してください。
-e オプションを付けると、wav と bmp ファイルを nbz 圧縮します。これを行うと、NSA アーカイブの圧縮の種類を示すフラグに ONScripter 独自の値を設定します。この独自拡張については、本家が将来アーカイブの仕様を拡張したときにバッティングする可能性がありますが、その時はそれを回避するようにコンバータを修正し、再コンバートすることで解決できます。その場合でも、save file 等には一切影響がありませんので、Zaurus で使用される方はこのオプションを付けてコンバートすることをお勧めします。wav を bzip2 で圧縮するので、wav を多用するゲームではかなりアーカイブが小さくなります。デメリットとしては、bzip2 の復号を行うため若干遅くなりますが、気がづかない程度です。
-vga オプションをつけると、640x480(VGA)サイズに圧縮します。SL-C700用です。-e オプションと組み合わせると効果的です。
さらに、サイズを小さくしたアーカイブを使うときは、onscripter に --disable-rescale オプションを指定してください。
なお、Linux 等でも、-DPDA をつけてコンパイルすることにより、320x240 画面でゲームをすることができます。
Windows でコンパイル済の SMPEG のバイナリを持ってくると、MP3 によっては音がぶつぶつとぎれて演奏されます。これは、SMPEG を MSVC でコンパイルする時の最適化の問題で、下記の通りに MSVC の global optimization を一部抑制する指定をし、自分でコンパイルすることで解決できます。
修正するファイル: audio/mpeglayer3.cpp
関数 layer3reorderandantialias の前後に、下のように #pragma 指定を追加
する。
#pragma optimize( "g", off ) void MPEGaudio::layer3reorderandantialias(int ch,int gr, REAL in[SBLIMIT][SSLIMIT], REAL out[SBLIMIT][SSLIMIT]){ ...... } #pragma optimize( "g", on )