# ONScripter のページ

Since: Feb. 6, 2002
Last updated: Feb. 27, 2006 [ソース更新]
メインサイト 、 ミラーサイト

## はじめに

ONScripter (オーエヌスクリプター)とは、NScripter 用に作られたスクリ プトを独自に解釈して実行するプログラムです。NScripterは高橋直樹氏が 開発されたゲーム実行エンジンであり、高橋氏のホームページからダウンロード できます。ONScripter で何ができるのかについてはαβεさんの[ONScripter のスゝメ]を参照し てください。

### ソースパッケージ

- onscripter-20060227.tar.gz
- onscripter-20060224.tar.gz(１つ前のバージョン)

### バイナリパッケージ（Zaurus 用以外は当方では動作チェックをしておりません）

- Zaurus(SL-5500, SL-A300, SL-B500, SL-C700, SL-C750, SL-C760)用 （zaurus-jaでも公開中）
- Debian Woody, Sarge 用（みーさん）
  - ;*** apt line ***
  - deb http://detroit.ddo.jp/debian/woody/ ./
  - deb-src http://detroit.ddo.jp/debian/woody/ ./
  - deb http://detroit.ddo.jp/debian/sarge/ ./
  - deb-src http://detroit.ddo.jp/debian/sarge/ ./
- Red Hat 系(RPM) 用（αβεさん）
  - ;*** apt line ***
  - rpm http://abe.nwr.jp/Vine/apt i386 nwr
  - rpm-src http://abe.nwr.jp/Vine/apt i386 nwr
- NetBSDパッケージ(pkgsrc)（いしはらさん）
  - インストールのしかたやバイナリパッケージ
- Windows 版 （バージョンの新しい方を使ってください）
  - 霧雨の降る日に（すとーむさん）
  - ONScripter Windows Binary（かつをのえぼしさん）
- ONScripter for PSP（霧雨の降る日に、すとーむさん）
- MacOSX 版 （バージョンの新しい方を使ってください）
  - 「ぼくだけの小さな世界」（しーくるさん）
  - ONScripter for Mac OS X（かつらさん）
- Private Ports for FreeBSD （藤田さんの Free BSD Ports）
- ONScripter for Dreamcast（bero さん）
- その他募集中。

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

## 特徴

### NScripter と比較した特徴

1. 現時点(2005.12.09)で最新の NScripter と互換性のあるセーブファイルを入出力することもできます。詳しくは異なるプラットフォーム上で同時に遊ぶ方法を参照してください。
2. 全ての操作をキーボードから行えます。もちろんマウスも使えますが、使う必要はありません。
3. CD Audio の演奏に対応していますが、これを MP3 ファイルの演奏に振り替える機能もあります。
4. マルチプラットフォームに対応しています。Windows, Linux, Mac OS X, Mac OS 9, Zaurus(SL-5500,SL-A300,SL-B500,SL-C700), FreeBSD, Solaris(on SPARC), Tru64 UNIX, Dreamcast での動作が確認されていますが、下記の libjpeg, bzip2, SDL 及び SMPEG が動く環境ならどこでも同じソースをコンパイルするだけで動くはずです。
5. コンパイル時に ENABLE_1BYTE_CHAR を指定することで、英語ノベル(1byte 文字)に対応します。
6. 全てのコマンド・仕様を実装していないため、ゲームによって挙動がおかしくなります。その場合は上記バグトラッキングシステムまで御報告下さい。

### その他の特徴

## 実行方法

### 動作環境

下記の処理系とライブラリ等が必要です。記載のバージョンは作者の開発環境のものですが、このバージョンに合わせる必要はないと思います。

#### 必須

・C++ 処理系
  g++ 3.3.5 (Linux)
  Visual C++ 6.0 (Windows)
・Unicode で指定された日本語 TTF フォント(ファイル名は default.ttf に)
・Independent JPEG Group
  libjpeg-6b
・The bzip2 and libbzip2 official home page
  bzip2-1.0.2
・SDL (Simple Direct Layer)
  SDL-1.2.5, SDL_image-1.2.3, SDL_mixer-1.2.5, SDL_ttf-2.0.6, SMPEG-0.4.4
・ FreeType
  FreeType 2.1.4

#### 推奨

・The Ogg Vorbis CODEC Project
  ogg-1.0, vorbis-1.0 (or Tremor vorbis)
  これは必須ではありませんが、最近多くのゲームで使われている Ogg Vorbis 形式で圧縮された音声を聞きたい場合には入れてください。同梱の Makefile.Linux, Makefile.ArmLinux ではデフォルトで使用するようになっています。

#### 必要に応じて導入

・MAD: Mpeg Audio Decoder
  mad-0.14.2b
  これは必要ではありませんが、Zaurus で MP3 を聞きたい方はほぼ必須。
  コンパイル時に MP3_MAD を定義することで、SMPEG に差し換えて使用されます。
・avifile
  avifile-0.7-0.7.38
  これは必要ではありませんが、avi コマンドを使ってムービーを再生したい場合には入れてください。Linux 上で動作確認しております。
  コンパイル時に USE_AVIFILE を定義し、AVIWrapper.o をリンクすることで使用可能になります。

当方では 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)の２つのファイルがあれば十分なはずです。arc1.nsa 〜 arc9.nsa がある場合は、それも置いてください。またゲームによっては、アーカイブの外に一部の画像ファイルを置いていたりします。その場合は、それらのファイルも元と同じように置いてください。一番確実なのは、ディレクトリ毎全てのファイルをコピーしてくることです。

[必須]下記のTrueType font による漢字表示を参考に、日本語 TrueType font を用意し、"default.ttf" という名前で置いてください。

[任意] CD audio の振り替え演奏をしたい場合は、下記のCD audio 演奏の振り替えに従って MP3 ファイルを用意してください。

[必須]最後に、ONScripter を実行してください。同じディレクトリにある nscript.dat とアーカイブを自動的に探し、ゲームが開始されます。なお ONScripter は、同じディレクトリにセーブデータやファイルログ等の状態ファイルを保存するため、このディレクトリには write permission を出しておいてください。

## TODO

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

1. (中)コマンド引数の unsigned (SDL_Rect)へのキャスト問題の解決。
2. (中)SIGSEGV 等の補足。
3. (中)bgcopy の後に画像を保存するようにする。
4. (中)文字の影が既に描画されている文字にかぶった場合に対処する。
5. (低)existspbtn を spbtn として実装しているが、それでよいのかを検証する。
6. (低)コードの 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, k, ↑ | ボタン・文章選択時にマウスカーソルを前の選択肢に動かす
n, j, ↓ | ボタン・文章選択時にマウスカーソルを次の選択肢に動かす
s, ← | 次の選択肢まで飛ばすモードに切り替え
o, → | １ページ表示をするかしないかの切り替え
l | マウスのホイールアップと同じ
f | Full screen mode と Window mode の切り替え
a | automode もしくは mode_ext が設定されている場合に、読み上げモードに入る
z | --edit オプションを指定して起動したときに、音量及び変数変更モードに入る
1, 2, 3 | 文字の描画速度を変更
Shift + q | 終了（end コマンドを発行）

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

### 起動オプション

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

オプション | 説明
--- | ---
-h,--help | へルプを表示して終了します。
-v,--version | バージョンを表示して終了します。
--cdaudio | CD Audio 演奏モードに変更します。CD Audio が使えなかったとしても MP3 ファイルは使用しません。
--cdnumber cd_number | CD Audio 演奏モードにおいて、CD-ROM ドライブが複数ある場合に、何番目のドライブを使用するのかを指定します。デフォルトは０番目です。
-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 | -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/その他画像ファイル | スクリーンショットを画像ファイルとして保存している場合があります。これはゲームによって場所や名前が異なるので、ゲーム毎に対応してください。

上記のうち save*.dat (以下セーブファイル)の構造については、 NScripter (ONScripter) のバージョンアップの際に拡張されることがあるた め、ONScripter の出力するセーブファイルには、構造識別のためにバージョ ン番号の入ったヘッダが付きます。ただし、ゲームのスクリプトがある場所に sav というディレクトリがある場合には、ヘッダ無しのセーブファイルを sav 以下にも同時に作成します。このバージョン番号はセーブファイルのバージョ ンであり、ONScripter のバージョンとは関係ありません。セーブファイルの 構造が変わるとバージョンアップします。

save*.dat の読み込みに関しては、ONScripter は、ヘッダ付きセーブファ イルか、もしくは ONScripter がサポートする最新バージョンのヘッダ無しセー ブファイルを読み込むことができます。読み込みは常にアーカイブと同じディ レクトリからであり、sav/ 以下から読み込むことはありません。

#### ONScripter 環境から ONScripter 環境へデータを移動

- 上記の書き出しファイルを全てそのままコピーしてください。
- 別途 NScripter も併用する場合には、sav/ 以下も忘れずにコピーしてください。
- ONScripter_dir/* → ONScripter_dir/* (上記の書き出しファイルのみ)
- ONScripter_dir/sav/save*.dat → ONScripter_dir/sav/save*.dat

#### NScripter 環境から ONScripter 環境へデータを移動

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

#### ONScripter 環境から NScripter 環境へデータを移動

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

#### 注意点

- NScripter は、現時点(2005/12/09)で配布されている最新の nscr.exe を使用してください。古いものとは、セーブファイルの互換性がありません。
- NScripter と ONScripter のデータ互換性は保証しませんが、私が試した限りは問題は生じておりません。
- 過去のほぼ全ての NScripter 用のゲームは、上記の最新の nscr.exe で問題なく遊ぶことができます。したがって、Windows 以外で同時に ONScripter を使用したい方は、Windows 上では最初から上記の nscr.exe に差し換えて使ってください。ゲームを進めてから差し換えると、古い形式のセーブデータを読むことができずエラーになることがあります。 一部のゲームでは nscr.exe を差し換えるとゲームの実行に支障が出るため、ONScripter で動作する場合には、Windows 環境では ONScripter の最新の Windows バイナリをご使用下さい。
- NScripterと併用する場合は、ONScripter 環境のアーカイブのある場所にあらかじめ sav というディレクトリを作成しておいてください。

### レジストリ読み込み

getreg コマンドは Windows の registry から指定されたデータを取得し ます。ONScripter では、テキストファイル registry.txt にデータを記述し、 これを読み込むことでこの機能を実現します。

registry.txt の書式は次の通りです。大文字・小文字は区別されます。ま た余計なスペース等を入れないようにして下さい。漢字が使われている場合、 文字コードが Shift JIS になることに注意してください。

    [getreg の２番目の引数（ただし前後の""は除く）]
    getreg の３番目の引数 = 比較対象文字列
    （前後の""は必要です）  （前後の""は必要です）

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 があり、またフリーの TrueType font として、kochi-gothic.ttf や wadalab-gothic.ttf があります。
ここで注意しなければいけないのは、TrueType font によっては正常に漢字表示ができないということです。この原因は FreeType library か SDL_ttf の制約だと思いますが、以下に私が試した５つのフォントについて書きます。

ＭＳゴシック (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 が使用されていても使える(上の例では ＭＳゴシックや東風ゴシック)といったところです。

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

### CD audio 演奏の振り替え

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

すると、スクリプトで CD audio の１曲目を演奏するコマンドがあった場合に、対応する 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 のアーカイブ（バージョン１）を 320x240 にする場合は、

    > nsaconv [-e] 800 arc.nsa zaurus_dir/arc.nsa
    > nsaconv [-e] 800 arc1.nsa zaurus_dir/arc1.nsa
    ...

画面のサイズが 800x600 で、拡張子が nsa のアーカイブ（バージョン２）を 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 アーカイブのバージョン１と２と３の区別は手動です。スクリプトで ns2 コマンドが使われていればバージョン２、ns3 コマンドが使われていればバージョン３です。スクリプトが確認できない場合は、まず -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 )

### 英語ノベル作成

これは 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 | 待ち状態ではない
EFFECT_EVENT_MODE | 画面効果実行中 | print, bg
WAIT_BUTTON_MODE | ButtonLink(画像)を使用した選択待ち | btnwait, select, 右クリックメニュー
WAIT_INPUT_MODE | クリックで飛ばせる待ち | delay, click, @, \
WAIT_SLEEP_MODE | クリックで飛ばせない待ち | テキスト文字描画

下の表の値は、上の表の値と組み合わせて使用されます。

値 | 説明 | 例
--- | --- | ---
WAIT_TIMER_MODE | 時間を指定した待ち、待ち中にアニメーションを実行 | 画面効果、テキスト文字描画以外のほぼ全ての場合
WAIT_TEXTBTN_MODE | textbtnwait での待ち | textbtnwait 使用時のみ
WAIT_VOICE_MODE | ボイスの発声終了を待つ | automode, btntime2 使用時のみ
WAIT_TEXT_MODE | テキスト終端での待ち | @, \, select

#### レイヤ描画順

下の表で、上のレイヤが下のレイヤを隠します。humanz の初期値は 499 です。

文字は、描画時には常に一番上に来ます。

通常 | windowback 使用
--- | ---
ボタン
テキストウィンドウ・文字 | 数値ラベル
数値ラベル | バー
バー | スプライト (humanz から 0)
＊＊モノクロ・ネガ効果＊＊ | テキストウィンドウ・文字
スプライト (humanz から 0) | ＊＊モノクロ・ネガ効果＊＊
立ち絵
スプライト (999 から humanz+1)
背景