ONScripter のページ

Since: Feb. 6, 2002
Last updated: Jan. 19, 2004
サービス統合に伴い、http://ogapee.at.infoseek.co.jp/onscripter.html へページ移転。
ソース更新。
ONScripter のバイナリパッケージを提供してくださる方を募集中です。当方では Zaurus 用のバイナリパッケージのみ公開します。その他のプラットフォーム用のパッケージを公開していただける方は、リンクを張らせていただきますのでメールを下さい。

はじめに

ONScripter(メ インサイトミラーサ イト)とは、NScripter 用に作られたスクリプトを独自に解釈して実行す るプログラムです。

NScripterは高橋直樹氏が 開発されたゲーム実行エンジンであり、高橋氏のホームページからダウンロード できます。

ONScripter で何ができるのかについてはαβεさんの[ONScripter のスゝメ]を参照し てください。

現在はベータ版 onscripter-beta-20040119.tar.gz を配布しております。
(一つ前のベータ版 onscripter-beta-20040105.tar.gz )

バイナリパッケージ(ただし当方では動作チェックはしておりません)

更新内容については[開発日誌]を参照して下さい。

動作報告・バグ報告・機能追加要望・パッチは随時受け付けますので[バグトラッキングシステム]までお願いします。
「○○ゲームの××場面がなんかおかしい」という程度でも結構ですのでお気軽にどうぞ。
[ogapee@aqua.dti2.ne.jp]まで直接送っていただいても構いません。

目次

特徴

NScripter と比較した特徴

  1. 全ての操作をキーボードから行えます。もちろんマウスも使えますが、使う必要はありません。
  2. CD Audio の演奏に対応していますが、これを MP3 ファイルの演奏に振り替える機能もあります。
  3. マルチプラットフォームに対応しています。Windows, Linux, Mac OS X, Zaurus(SL-5500,SL-A300,SL-B500,SL-C700), FreeBSD, Solaris(on SPARC), Dreamcast での動作が確認されていますが、下記の libjpeg, bzip2, SDL 及び SMPEG が動く環境ならどこでも同じソースをコンパイルするだけで動くはずです。
  4. 全てのコマンド・仕様を実装していないため、ゲームによって挙動がおかしくなります。その場合は上記バグトラッキングシステムまで御報告下さい。

実行環境としての特徴

  1. セーブ・ロードができます。セーブファイルには、互換性維持のためのバージョン番号の入ったヘッダが付きますが、ゲームのスクリプトがある場所に sav というディレクトリがある場合はヘッダ無しのセーブファイルを sav 以下にも同時に作成します。このバージョン番号はセーブファイルのバージョンであり、ONScripter のバージョンとは関係ありません。セーブファイルの構造が変わるとバージョンアップします。読み込みは、ヘッダ付きセーブファイルか、もしくは ONScripter がサポートする最新バージョンのヘッダ無しセーブファイルを読み込むことができます。読み込みは常にアーカイブと同じ場所からなので、他から持ってくる場合にはそこに置いてください。
  2. sar, nsa (nbz lzss を含む) アーカイブのデコードを実装しています。
  3. 全ての画面効果(quake 系, 効果番号 1 - 18)を実装しています。
  4. wav ファイル・MP3 ファイル・CD Audio・MIDI 演奏を実装しています。
  5. 右クリックメニュー(セーブ・ロード・回想・ウィンドウを消す・リセット・スキップ)を実装しています。
  6. カーソル・立ち絵・スプライトのアニメーションを実装しています。

実行方法

動作環境

下記のライブラリと処理系が必要です。バージョンは最新である必要はないかもしれませんが、他のバージョンでは確認していません。

Independent JPEG Group
libjpeg-6b
The bzip2 and libbzip2 official home page
bzip2-1.0.2
SDL (Simple Direct Layer)
SDL-1.2.4, SDL_image-1.2.2, SDL_mixer-1.2.3, SDL_ttf-2.0.5
SMPEG (SDL Mpeg Player Library)
SMPEG-0.4.4
FreeType
FreeType 2.1.3
MAD: Mpeg Audio Decoder
mad-0.14.2b
これは必要ではありませんが、Zaurus で MP3 を聞きたい方はほぼ必須。
コンパイル時に MP3_MAD を定義することで、SMPEG に差し換えて使用されます。
The Ogg Vorbis CODEC Project
ogg-1.0, vorbis-1.0 (or Tremor vorbis)
これは必要ではありませんが、Ogg Vorbis 形式で圧縮された音声を聞きたい場合には入れてください。同梱の Makefile.Linux, Makefile.ArmLinux ではデフォルトで使用するようになっています。
avifile
avifile-0.7-0.7.38
これは必要ではありませんが、avi コマンドを使ってムービーを再生したい場合には入れてください。Linux 上で動作確認しております。
コンパイル時に USE_AVIFILE を定義し、AVIWrapper.o をリンクすることで使用可能になります。
・Unicode で指定された日本語 TTF フォント
・C++ 処理系
Linux g++ 2.95.4
Windows Visual C++ 6.0

当方では 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 を出しておいてください。

TODO

現在把握しており直す予定のバグ・未実装機能。先頭の文字は優先度。

  1. ()スクリプトを全部キャッシュしておくのをやめる。ただし、index だけは付けておく。
  2. ()mask 画像等の読み込みの際に、directory 付きのファイル名を parse できるようにする。
  3. ()existspbtn を spbtn として実装しているが、それでよいのかを検証する。
  4. ()skip でマイナス方向にラベルをまたぐと破綻するバグ?を取る。lchk とのからみも考えて調べる。
  5. ()コードの clean up。

リンク

お世話になっているページ、よく利用させていただいているページへのリンクです。

娯楽用アプリケーションの異機種間データ共有の試み
千熊屋さんによる様々なゲーム互換エンジンへのリンク集です。ONScripter も紹介していただいてます。
ONScripter のスゝメ
αβεさんによる ONScripter の導入方法・既存のゲームの動作状況・バグ報告のページです。
ONScripter を開発する上でたいへんお世話になっております。
影舞を利用したバグトラッキングシステムも運用していただいております。
ONScripter に興味を持たれた方は最初にこちらのページを見ることをお勧めします。
Adas's Linux ゲームプログラム
Mac OS X で検証していただいている adas さんページです。
MacOS X 等に SDL をインストールする方法なども書かれています。
Linux Power
αβεさんよる ONScripter の紹介記事が載っています。興味のある方は是非手にとってみてください。

雑多なこと

キーボードショートカットについて

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バージョンを表示して終了します。
--cdaudioCD Audio 演奏モードに変更します。CD Audio が使えなかったとしても MP3 ファイルは使用しません。
-f,--font file使用するフォントの path を指定します。
--registry file使用する registry file を指定します。
--dll file使用する dll file を指定します。
-r,--root path使用するゲームファイルのあるディレクトリを指定します。
--force-button-shortcutgetenter と useescspc のコマンドを無視します。つまり、マウスのクリックを強制的に esc, space, return キーに割り付けます。
--disable-rescale-DPDA を付けてコンパイルした ONScripter で、画像の解像度を PDA 用に落としたアーカイブを使用する場合は、このオプションを設定してください。ONScripter 内で解像度を 320x240 用に変換することを抑制します。
--editz キーを押したときに、音量及び変数の編集モードに入れるようになります。

異なるプラットフォーム上で同時に遊ぶ方法

例えば家では 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/その他画像ファイルスクリーンショットを画像ファイルとして保存している場合があります。これはゲームによって場所や名前が異なるので、ゲーム毎に対応してください。

ONScripter 環境から ONScripter 環境へ

上記のファイルを全てのそのままコピーしてください。
別途 NScripter も併用する場合には、sav/ 以下も忘れずにコピーしてください。

NScripter 環境から ONScripter 環境へ

上記のファイルを全て(save*.datを含む)そのままコピーしてください。
さらに save*.dat については、sav というディレクトリ以下にもファイルをコピーしてください。この作業は、後で ONScripter 環境から NScripter 環境にデータを移す場合に必要になります。
NScripter_dir/save*.dat -> ONScripter_dir/sav/save*.dat

ONScripter 環境から NScripter 環境へ

save*.dat を除く上記のファイルを全てのそのままコピーしてください。
save*.dat については、sav というディレクトリ以下に生成されたファイルをコピーしてください。
ONScripter_dir/sav/save*.dat -> NScripter_dir/save*.dat

注意点

レジストリ読み込みについて

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 を読みにいきます。

DLL 読み込みについて

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 による漢字表示について

漢字を表示するためには、TrueType font を用意する必要があります。例えば Windows 2000 では \WinNT\Fonts の下に msgothic.ttc があり、またフリーの TreuType font として、kochi-gothic.ttf や wadalab-gothic.ttf があります。
ここで注意しなければいけないのは、TrueType font によっては正常に漢字表示ができないということです。この原因は FreeType library か SDL_ttf の制約だと思いますが、以下に私が試した5つのフォントについて書きます。

MSゴシック (msgothic.ttc)
embedded bitmap を使っており、ゲームで 22pt 以下のフォントを要求すると正常に表示できません。
東風ゴシックフォント (kochi-gothic.ttf)
embedded bitmap を使っており、ゲームで 17pt 以下のフォントを要求すると正常に表示できません。
和田研ゴシック (wadalab-gothic.ttf)
embedded bitmap は使っていませんが、UNICODE で記述されていないため使えません。
HG ゴシック (hgrsmp.ttf)
embedded bitmap は使っておらず、全てのサイズのフォントを正常に表示できます。
みかちゃんフォント(みかちゃん-pb.ttf)
embedded bitmap は使っておらず、全てのサイズのフォントを正常に表示できます。

まとめると、UNICODE で記述されておりかつ embedded bitmap を使っていないフォント(上の例では HG ゴシックやみかちゃんフォント)が一番問題がなく、大きなフォントしか使わないゲームでは embedded bitmap が使用されていても使える(上の例では MSゴシックや東風ゴシック)といったところです。

ONScripter を起動する前に、使用する TreuType font ファイルを、default.ttf という名前にしてゲームのスクリプトがある場所のコピーしておいてください。

CD audio 演奏の振り替えについて

ゲームのスクリプトがある場所に cd というディレクトリを作り、そこに
cd/track01.mp3
cd/track02.mp3
cd/track03.mp3
...
cd/track14.mp3
...
という名前で MP3 ファイルを置きます。

すると、スクリプトで CD audio の1曲目を演奏するコマンドがあった場合に、対応する track01.mp3 を演奏するようになります。

MP3 を必ず用意する必要はなく、その場合は音が鳴らないだけです。

MIDI 演奏機能について

MIDI は SDL_mixer の機能を使って演奏します。
この時、現在のディレクトリに tmp.mid という一時ファイルを作ります。美しくないですが、SDL_mixer の MIDI 読み込み部がファイルからの読み込みしかサポートしていないためやむをえません。

Unix系(動作確認は Linux と Zaurus)でソフトウェア音源で演奏する場合(デフォルト)。
SDL_mixer に取り込まれている timidity を使用してソフトウェア音源で演奏します。この場合、MIDIの音色データtimidity.tar.gzをダウンロードして /usr/local/lib/ 以下に展開してください。
Windows の場合。
timidity.tar.gzをダウンロードして c:\ 以下に展開してください。 これをしなくても MIDI が鳴ったと思っていたのですが、こうしないと落ちるようです。
Mac OS X の場合。
ONScripter for Mac OS X(かつらさん)のバイナリに添付されている外部プログラムを利用して演奏が可能です。(当方未確認)
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 ( 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 上で 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 )
戻る
メール宛先 ogapee@aqua.dti2.ne.jp
Copyright (c) 1998-2004 Studio O.G.A. All rights reserved.