はじめに
ONScripter (オーエヌスクリプター)は NScripter (解説) 用に作られたスクリプトを独自に解釈して実行するプログラムです。全く同じゲームデータを使って、Windows, Android, iOS などの上でゲームを実行することができます。
動作報告・バグ報告・機能追加要望・パッチは随時受け付けますので[バグトラッキングシステム]までお願いします。報告の際はオプション欄の中央のチェックボックスを外してから送信してください。「○○ゲームの××場面がなんかおかしい」という程度でも結構ですのでお気軽にどうぞ。ページの一番下に記載のあるメールアドレスまで直接送っていただいても構いません。
バイナリパッケージ (Android, Zaurus 以外は当方では動作未確認)
ONScripter-EN とは、Uncle Mion さんによって英語のスクリプトがうまく扱えるように拡張された ONScripter です。サポートされている命令も ONScripter より充実しています。従来の日本語のスクリプトも問題なく実行できるようです。
特長
- 現時点(2011/12/15)で最新の NScripter と互換性のあるセーブファイルを入出力することもできます。異なるプラットフォーム上で同時に遊ぶ方法を参照してください。
- 全ての操作をキーボードから行えます。もちろんマウスも使えます。
- CD Audio の演奏を音楽ファイル(MP3, Ogg)の演奏に振り替える機能があります。
- マルチプラットフォームに対応しており、Windows, Linux, MacOS X, MacOS 9, Android(1.6 以上), iPhone, iPad, PSP, Zaurus(SL-5500,SL-A300,SL-B500,SL-C700), FreeBSD, Solaris(on SPARC), Tru64 UNIX, OS/2Warp, iPod, PocketPC, Playstation3, Wii, GP2X, NetWalker, Dreamcast での動作が確認されています。それ以外のプラットフォームでも、動作環境が準備できれば動作するはずです。
- 全ての命令・仕様を実装していないため、ゲームによっては挙動がおかしくなります。その場合は上記バグトラッキングシステムまで御報告下さい。
実行方法
動作環境
下記の処理系とライブラリ等が必要です。記載のバージョンは作者の開発環境のものですが、このバージョンに合わせる必要はないと思います。
必須
推奨
- SMPEG-0.4.6
MPEG1 形式の音楽ファイルを再生する場合には入れてください。MP3 を演奏するには SMPEG か MAD のいずれかが必要です。
- ogg-1.2.0, vorbis-1.3.1 (The Ogg Vorbis CODEC Project)
Ogg Vorbis 形式の音楽ファイルを再生する場合には入れてください。同梱の Makefile.Linux, Makefile.ArmLinux ではデフォルトで使用するようになっています。整数演算のみを使用した Tremor vorbis を代わりに使うこともできます。
必要に応じて導入
- mad-0.15.1b (MAD: Mpeg Audio Decoder)
整数演算のみを使用した MP3 演奏ライブラリです。Android や Zaurus で MP3 を演奏する場合には必須です。MAD を使用するためには、SMPEG の代わりに MAD を有効にしてコンパイルした SDL_mixer を使用してください。
- avifile-0.7.48 (avifile)
avi 命令を使ってムービーを再生する場合には入れてください。Linux で動作確認をしています。USE_AVIFILE を定義し AVIWrapper.o をリンクしてコンパイルすると使用されます。
当方では Linux (Debian Wheezy), Android (Sony (4.4.2)), iOS (iPad2), (時々 Windows) で動作確認をしています。
コンパイル
適当な場所に ONScripter を展開し、Linux の場合は make -f Makefile.Linux, Windows の場合は、nmake -f Makefile.Win とやって下さい。Windows の場合は、bzip2, SDL と SMPEG のヘッダファイルとライブラリのある場所を Makefile.Win で指定しているので、自身の環境に合わせて適宜修正してください。
実行
[必須]まずゲームのアーカイブを一カ所にまとめます。通常は、スクリプト(0.txt や nscript.dat)とアーカイブ(arc.sar や *.nsa や *.ns2)があれば十分なはずです。アーカイブが複数ある場合は全て置いてください。またゲームによっては、アーカイブの外に一部の画像ファイルや音楽ファイルを置いている場合があります。その場合は、それらのファイルも元と同じように置いてください。ディレクトリ毎全てのファイルをコピーすると確実です。
[必須]下記のTrueType font による文字表示を参考に、日本語 TrueType font を用意し、"default.ttf" という名前で置いてください。
[任意] CD audio の振り替え演奏をしたい場合は、下記のCD audio 演奏の振り替えに従って MP3 ファイルを用意してください。
[必須]最後に、ONScripter を実行してください。同じディレクトリにある nscript.dat とアーカイブを自動的に探し、ゲームが開始されます。なお ONScripter は、同じディレクトリにセーブデータやファイルログ等の状態ファイルを保存するため、このディレクトリには write permission を出しておいてください。
雑多なこと
キーボードショートカット
ONScripter は全ての操作をキーボードで行うことができます。ただし、
スクリプトの方でショートカットキーを設定している場合は、そちらが優先さ
れます。
キー | 説明 |
space | マウスの左クリックと同じだが、下にボタンがあってもボタン外を押したことになる |
return | マウスの左クリックと同じ |
escape | マウスの右クリックと同じ |
p,k,↑ | ボタン・文章選択時にマウスカーソルを前の選択項目に動かす |
n,j,↓ | ボタン・文章選択時にマウスカーソルを次の選択項目に動かす |
s | 次の選択肢まで飛ばすモードに切り替え |
o | 1ページ表示をするかしないかの切り替え |
h,← | マウスのホイールアップと同じ |
l,→ | マウスのホイールダウンと同じ |
f | Full screen mode と Window mode の切り替え |
a | automode もしくは mode_ext が設定されている場合に、読み上げモードに入る |
z | --edit オプションを指定して起動したときに、音量及び変数変更モードに入る |
1, 2, 3 | 文字の描画速度を変更 |
Shift + q | 終了(end 命令を発行) |
起動オプション
オプション | 説明 |
-h,--help | へルプを表示して終了します。 |
-v,--version | バージョンを表示して終了します。 |
--cdaudio | CD Audio 演奏モードに変更します。CD Audio が使えなかったとしても MP3 ファイルは使用しません。 |
--cdnumber cd_number | CD Audio 演奏モードにおいて、CD-ROM ドライブが複数ある場合に、何番目のドライブを使用するのかを指定します。デフォルトは0番目です。 |
-f,--font file | 使用する TTF フォントファイルを指定します。 |
--registry file | 使用する registry file を指定します。 |
--dll file | 使用する dll file を指定します。 |
-r,--root path | 使用するゲームファイルのあるディレクトリを指定します。 |
--fullscreen | フルスクリーンモードで起動します。 |
--window | ウィンドウモードで起動します。 |
--force-button-shortcut | getenter と useescspc の命令を無視します。つまり、マウスのクリックを強制的に esc, space, return キーに割り付けます。 |
--enable-wheeldown-advance | テキスト終端でのクリック待ちの際に、マウスのホイールダウン操作をクリック操作として扱います。textgosub でクリック待ちをカスタマイズしているときには効果はありません。 |
--disable-rescale | PDA_WIDTH や PDA_AUTOSIZE を定義してコンパイルした ONScripter において、アーカイブから画像を読み込む際に、画像の大きさを端末のスクリーンの大きさに変換しないようにします。あらかじめアーカイブ圧縮によって画像の大きさを端末のスクリーンの大きさに変換しておいたアーカイブを一緒に使用すると、変換処理が省略されるため動作が高速になります。ただし、この場合でもアーカイブ外の画像ファイルは大きさが変換されます。 |
--render-font-outline | SDL_ttf 2.0.10 以降でサポートされたフォントのアウトライン描画機能を使い、影付き文字を黒い輪郭の袋文字として表示します。文字がくっきりとして見やすくなると思います。 |
--edit | z キーを押したときに、音量及び変数の編集モードに入れるようになります。 |
異なるプラットフォーム上で同時に遊ぶ方法
例えばデスクトップPC(Windows, Linux, MacOSX)やスマートフォン(Android, iPhone)など、異なるプラットフォームでセーブファイルを共有してゲームを進めることができます。プラットフォームごとにゲームのアーカイブを用意し、以下の注意にしたがってプラットフォームを移るたびに 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/その他画像ファイル | スクリーンショットを画像ファイルとして保存している場合があります。これはゲームによって場所や名前が異なるので、ゲームごとに対応してください。 |
セーブファイルのフォーマットは NScripter (ONScripter) がバージョン
アップするときに変更されることがあります。そのため、ONScripter の出力
するセーブファイルには、先頭にセーブファイルのバージョン番号が入ってい
ます。また、sav というディレクトリがある場合には、バージョン番号なしの
セーブファイルを sav 以下にも同時に作成します。sav 以下に生成されるセー
ブファイルは、最新の NScripter が生成するセーブファイルと互換性があり
ます。なお、セーブファイルのバージョン番号は ONScripter のバージョンと
は異なります。
ONScripter は、バージョン番号ありの任意のセーブファイルか、もしくは最新のフォーマットでバージョン番号なしのセーブファイルを読み込むことができます。
ONScripter から ONScripter へデータを移動
- 上記の書き出しファイルを全てそのままコピーしてください。
- ONScripter_dir/* → ONScripter_dir/*
NScripter から ONScripter へデータを移動
- 上記の書き出しファイルを全て(save*.datを含む)そのままコピーしてください。
- NScripter_dir/* → ONScripter_dir/*
ONScripter から NScripter へデータを移動
- save*.dat を除く上記の書き出しファイルを全てそのままコピーしてください。
- ONScripter_dir/* → NScripter_dir/*
- save*.dat については sav ディレクトリ以下に生成されたファイルをコピーしてください。
- ONScripter_dir/sav/save*.dat → NScripter_dir/save*.dat
注意点
- NScripter は、現時点(2011/12/15)で配布されている最新の nscr.exe を使用してください。古い NScripter が出力するセーブファイルを ONScripter で読み込むことはできません。
- 最新の NScripter と ONScripter のデータ互換性は保証しませんが、私が試した限りは問題は生じておりません。
- ONScripter と NScripter を併用される方は、Windows 上では最初から上記の最新の nscr.exe を使用してください。その場合、あらかじめ sav というディレクトリを作成しておいてください。
レジストリ読み込み
getreg 命令は Windows の registry から指定されたデータを取得し
ます。ONScripter では、テキストファイル registry.txt にデータを記述し、
これを読み込むことでこの機能を実現します。
registry.txt の書式は次の通りです。大文字・小文字は区別されます。ま
た余計なスペース等を入れないようにして下さい。2バイト文字が使われてい
る場合、文字コードが 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 を読みにいきます。
DLL 読み込み
exec_dll 命令は Windows 上で実行可能な DLL (Dynamic Link
Library) を実行します。ONScripter では、テキストファイル dll.txt に
DLL 名とその戻値の対応を記述し、これを読み込むことでこの機能を実現しま
す。従って、実際に DLL が実行されるわけではなく、また戻値は固定になり
ます。
dll.txt の書式は次の通りです。大文字・小文字は区別されます。また余
計なスペース等を入れないようにして下さい。2バイト文字が使われている場
合、文字コードが 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 による文字表示
文字を表示するためには、等幅の TrueType font を用意する必要があります。例えば Windows 7 には c:\Windows\Fonts の下に msgothic.ttc (MSゴシック)があり、またフリーで手にはいるフォントには以下のものがあります。
- M+とIPAの合成フォント
- M+ フォントと IPA フォントを元にした再配布可能なフォントです。特に Migu-2M-bold.ttf がきれいな太字で見やすくお勧めです。
- IPAフォント
- 再配布可能なゴシックと明朝のフォントです。
- みかちゃんフォント
- 手書き風のフォントです。
SDL_ttf の太字表示機能を使うと日本語の表示が汚くなってしまうため、ONScripter では太字指定を無視しています。そのため、特にスマートフォンなど画面が小さい機器では、上の Migu-2M-bold.ttf や HGゴシックE (HGRGE.TTC) など最初から太字のフォントを使用するとよいと思います。
ONScripter を起動する前に、使用する TrueType font ファイルを、default.ttf という名前にしてゲームのスクリプトがある場所のコピーしておいてください。
CD audio 演奏の振り替え
ゲームのスクリプトがある場所に cd というディレクトリを作成し、そこに以下の名前で音楽ファイルを置きます。
cd/track01.xxx
cd/track02.xxx
cd/track03.xxx
...
cd/track14.xxx
...
音楽ファイルのフォーマットは mp3, ogg, wav 形式に対応しています。上の
xxxは、使用するフォーマットに合わせて変更してください。
スクリプト中の CD audio の1曲目を演奏する命令は、
"track01.mp3" (mp3 形式の場合)を演奏するように変更されます。
"--cdaudio"オプションが指定されていないかぎり、これがデフォ
ルトの挙動となります。音楽ファイルが見つからない場合は、演奏せずに続行
します。
MIDI 演奏機能
MIDI は SDL_mixer の機能を使って演奏します。
この時、現在のディレクトリに tmp.mus という一時ファイルを作ります。美しくないですが、SDL_mixer の MIDI 読み込み部がファイルからの読み込みしかサポートしていないためやむをえません。
- Unix系(動作確認は Linux と Zaurus)でソフトウェア音源で演奏する場合(デフォルト)。
- SDL_mixer に取り込まれている timidity を使用してソフトウェア音源で演奏します。この場合、MIDIの音色データtimidity.tar.gzをダウンロードして /usr/local/lib/ 以下に展開してください。
- Windows の場合。
- timidity.tar.gzをダウンロードして c:\ 以下に展開してください。
これをしなくても MIDI が鳴ったと思っていたのですが、こうしないと落ちるようです。
- Unix系(動作確認は Linux)で外部 MIDI 音源を利用して演奏する場合。
- playmidi 等の外部音源を使用できる MIDI player をインストールし、環境変数 MUSIC_CMD を設定してください。(例 MUSIC_CMD=/usr/bin/playmidi)
当方では、シリアル接続で外部音源を繋ぎ、MUSIC_CMD に '/usr/bin/midiplay -q -o /dev/ttyS0' を設定して動作確認をしています。
playmidiは、カーネルで認識される MIDI ポートに対してしか演奏できませんが、midiplayはシリアルに直接出せます。
シリアルポートをMIDIポートにする patchを使えば、playmidi でもシリアル接続音源を使えそうですが、未確認です。
アーカイブ圧縮
昔のZaurus (320x240) や PSP (360x270) などは画面の大きさが小さいた
め、あらかじめアーカイブ中の画像ファイルを画面サイズに合わせて小さくし
ておくことにより、アーカイブサイズを縮小し、少ない記憶デバイスを有効活
用することができます。なお、SPB 圧縮の画像は、後述の -e オプションを指
定しない場合 BMP 形式として格納されます。
使い方
> sarconv 変換元画面幅 変換先画面幅 変換元SARファイル名 変換先SARファイル名
> nsaconv [-e] [-ns2] [-ns3] 変換元画面幅 変換先画面幅 変換元NSAファイル名 変換先NSAファイル名
変換元画面幅は 640 か 800 のいずれかを指定してください。
変換先画面幅は 176(iPod), 320(QVGA), 360(PSP), 384(PSP), 640(VGA)
などが指定できます。
使用例
画面のサイズが 640x480 で拡張子が sar のアーカイブを 320x240 にする
場合
> sarconv 640 320 arc.sar zaurus_dir/arc.sar
...
画面のサイズが 800x600 で拡張子が nsa のアーカイブ(バージョン1)
を 320x240 にする場合
> nsaconv [-e] 800 320 arc.nsa zaurus_dir/arc.nsa
> nsaconv [-e] 800 320 arc1.nsa zaurus_dir/arc1.nsa
...
画面のサイズが 800x600 で拡張子が nsa のアーカイブ(バージョン2)
を 640x480 にする場合
> nsaconv [-e] -ns2 800 640 arc.nsa zaurus_dir/arc.nsa
> nsaconv [-e] -ns2 800 640 arc1.nsa zaurus_dir/arc1.nsa
...
NSA アーカイブのバージョン1と2と3の区別は手動です。スクリプトで ns2 命令が使われていればバージョン2、ns3 命令が使われていればバージョン3です。スクリプトが確認できない場合は、まず -ns2 を付けずに試し、うまくいかなかったら -ns2 もしくは -ns3 を付けて試してください。
-e オプションを付けると、wav と bmp ファイルを nbz 圧縮します。これを行うと、NSA アーカイブの圧縮の種類を示すフラグに ONScripter 独自の値を設定します。この独自拡張については、本家が将来アーカイブの仕様を拡張したときにバッティングする可能性がありますが、その時はそれを回避するようにコンバータを修正し、再コンバートすることで解決できます。その場合でも、save file 等には一切影響がありませんので、Zaurus で使用される方はこのオプションを付けてコンバートすることをお勧めします。wav を bzip2 で圧縮するので、wav を多用するゲームではかなりアーカイブが小さくなります。デメリットとしては、bzip2 の復号を行うため若干遅くなりますが、気が付かない程度です。
-j オプションを付けると、ファイル名はそのままで bmp ファイルを jpeg に変換します。ただし、パレットカラーの bmp ファイルは bmp のまま変換されます。
-q オプションで jpeg で圧縮する際の品質(0〜100)を指定することができます。小さい値を指定すると、品質が悪くなりますが、圧縮後のサイズが小さくなります。デフォルトとは75です。
サイズを小さくしたアーカイブを使うときは、onscripter に --disable-rescale オプションを指定してください。
なお、Linux 等でも、-DPDA をつけてコンパイルすることにより、320x240 画
面でゲームを実行することができます。
Windows 上で MP3 の音がぶつぶつとぎれる問題
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 )
英語ノベル作成(Obsolete)
これは Chend さん(chendo[at]gmail.com)からの要望に基づく ONScripter
独自の拡張です。これまで、仕様の提案やパッチなど多くの協力をしていただ
きました。
コンパイル時に ENABLE_1BYTE_CHAR を定義することで、`(back quote) 以
降行末もしくは別の ` までを、1byte 文字で記述されたテキスト文とみなし
て表示するようにします。この間では半角スペースが表示として有効になりま
すが、テキスト内の変数表示は無効になり、また色・時間指定も開始位置によっ
ては無効になります。テキスト途中で色を変える場合は、/ で行を分けるなど
してください。ただし、クリック待ち(@)改ページ待ち(\)直後の強制クリック
文字を無視(_)は有効です。
将来本家で ` に何か機能を割り振った場合には、削除もしくは別の文字に
変更される可能性があります。現状のように ENABLE_1BYTE_CHAR の指定の有
無で使い分けられるようにするかもしれませんが、保証の限りではありません。
また、コンパイル時に ENABLE_1BYTE_CHAR と合わせて FORCE_1BYTE_CHAR
を指定すると、全ての表示を半角にすることが可能になります。具体的には、
上記に加えて、右クリックメニューの表示が英語になり、また数字変数の表示
が半角になります。
以下にスクリプト例を書きます。
*define
clickstr `.?"`, 2
savename `Save the scene`, `Load the scene`, "Memory "
rmenu `Save to file`,save,`Load from file`,load
game
*start
`Hi, this was test.
`Hi, this is test again.
`_"He said so."
`_"She said so."
`Does it work??
br
selgosub `Say "Turn to the right."`, *right,
`Say "Turn to the left."`, *left ,
"`Do nothing.", *nothing
end
*right
`You turned to the right.
return
*left
`You turned to the left.
return
*nothing
`You didn't do anything.
return
開発メモ
event_mode
下の表の値は排他的に用いられます。
値 | 説明 | 例 |
IDLE_EVENT_MODE | クリックで飛ばせない待ち | wait |
WAIT_BUTTON_MODE | ButtonLink(画像)を使用した選択待ち | btnwait, select, 右クリックメニュー |
WAIT_INPUT_MODE | クリックで飛ばせる入力待ち | delay, click, @, \, テキスト文字描画, 画面効果 |
下の表の値は、上の表の値と組み合わせて使用されます。
値 | 説明 | 例 |
WAIT_TIMER_MODE | 時間を指定した待ち、待ち中にアニメーションを実行 | 画面効果、テキスト文字描画以外のほぼ全ての場合 |
WAIT_VOICE_MODE | ボイスの発声終了を待つ | automode, btntime2 使用時のみ |
WAIT_TEXT_MODE | テキスト終端での待ち(右クリックメニューの可否の判定用) | @, \, select |
WAIT_RCLICK_MODE | 右クリック待ち | lrclick |
レイヤ描画順
下の表で、上のレイヤが下のレイヤを隠します。humanz の初期値は 499 です。
文字は、描画時には常に一番上に来ます。
通常 | windowback 使用 |
ボタン |
カーソル |
テキストウィンドウ・文字 | 数値ラベル |
数値ラベル | バー |
バー | スプライト (humanz から 0) |
**モノクロ・ネガ効果** | テキストウィンドウ・文字 |
スプライト2 (255 から 0) | スプライト2 (255 から 0) |
スプライト (humanz から 0) | **モノクロ・ネガ効果** |
立ち絵 |
スプライト (999 から humanz+1) |
背景 |