ONScripter のページ

Created: Feb. 6, 2002
Last updated: May 29, 2002
はじめに

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

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

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

現在はベータ版onscripter-beta-20020529a.tar.gzを配布しております。
ベータ版ゆえデバッグ出力が有効になっていますが、正式版になったら取り除きます。
(一つ前のベータ版onscripter-beta-20020526.tar.gz)

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

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

目次

特徴

NScripter と比較した特徴

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

実行環境としての特徴

  1. セーブ・ロードができます(ただし、save?.dat は独自形式)。
  2. sar, nsa (nbz lzss を含む) アーカイブのデコードを実装しています。
  3. よく使われる画面効果(quake 系, 効果番号 1 - 15, 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.0.9
MAD: Mpeg Audio Decoder
mad-0.14.2b
これは必要ではありませんが、Zaurus で MP3 を聞きたい方はほぼ必須。
コンパイル時に MP3_MAD を定義することで、SMPEG に差し換えて使用されます。
・Unicode で指定された日本語 TTF フォント
・C++ 処理系
Linux g++ 2.95.4
Windows Visual C++ 6.0

当方では Windows と Linux と Zaurus(SL-5500) で動作確認をしています。
また MacOS X での動作報告を受けています。
その他の多くの 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. ()windowback の挙動がおかしいのを直す
  2. ()Zaurus 用にアーカイブ内の画像を半分の大きさにするコンバータを作る
  3. ()puttext 内の文字列で \@/ を取り扱えるようにする
  4. ()blt の拡大縮小に対応。
  5. ()雪をスムーズに降らせる
  6. ()erasetextwindow off 時の選択画面での表示の正常化。
  7. ()save/load 時に確認画面を表示する
  8. ()archive の検索の高速化
  9. ()alpha blend が遅いのをなんとかしたい
  10. ()sprite の現在の表示 cell を保存する?
  11. ()skip でマイナス方向にラベルをまたぐと破綻するバグ?を取る。lchk とのからみも考えて調べる。
  12. ()voicevol, sevol, mp3vol の引数の扱いを確認。
  13. ()文字の色を変えたあとに絵の描画が入ると、文字の色が全部同じになってしまう。
  14. ()コードの clean up。
  15. ()textgosub 時に、同じ行で最初に変数を設定しその後テキストとして使用すると、設定がテキストに正確に反映されない。こんなトリッキーなことをするゲームが存在しないことを願う。
リンク

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

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

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

ONScripter は全ての操作をキーボードで行うことができます。下にショートカット一覧を書きます。

キー説明
spaceマウスの左クリックと同じだが、下にボタンがあってもボタン外を押したことになる
returnマウスの左クリックと同じ
escapeマウスの右クリックと同じ
p, ↑ボタン・文章選択時にマウスカーソルを前の選択肢に動かす
n, ↓ボタン・文章選択時にマウスカーソルを次の選択肢に動かす
s 次の選択肢まで飛ばすモードに切り替え
o 1ページ表示をするかしないかの切り替え
f Full screen mode と Window mode の切り替え
z --edit オプションを指定して起動したときに、音量及び変数変更モードに入る
1, 2, 3 文字の描画速度を変更

ただし、s 以外のキーは入力待ちの時しか受け付けません(文字を描画している最中は受け付けません)。次の選択肢まで飛ばしている最中に限り、任意のタイミングで s キーにより通常の状態に戻すことができます。

また、コンソール画面で Ctl-c することで ONScripter を終了できます。その場合、グローバル変数等は保存されるので、終了する場合はゲームのメニューから終了するか、これで強制終了するかしてください。

起動オプションについて

以下に示すオプションを指定できます。ただし、オプション無しがデフォルト動作です。

オプション 説明
-h,--helpへルプを表示して終了。
-v,--versionバージョンを表示して終了。
--cdaudioCD Audio 演奏モードに変更。CD Audio が使えなかったとしても MP3 ファイルは使用しません。
--font file使用するフォントの path を指定。
--registry file使用する registry file を指定。
--arc path使用するゲームファイルのあるディレクトリを指定。
--editz キーを押したときに、音量及び変数の編集モードに入れるようになる。

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

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

音量及び変数編集モードについて

これは暫定的なおまけ機能であり、今後変更されたり無くなったりする可能性があります。

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 の制約だと思いますが、以下に私が試した4つのフォントについて書きます。

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

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

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

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 が鳴ったと思っていたのですが、こうしないと落ちるようです。
MacOS X の場合。
上の Unix系でソフトウェア音源で演奏する場合に準じてください。(当方未確認)
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 でもシリアル接続音源を使えそうですが、未確認です。

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

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

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

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

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-2002 Studio O.G.A. All rights reserved.