はじめに

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

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

動作報告・バグ報告・機能追加要望・パッチは随時受け付けますので[ バグトラッキングシステム]までお願いします。報告の際はオプション欄 の中央のチェックボックスを外してから送信してください。「○○ゲームの× ×場面がなんかおかしい」という程度でも結構ですのでお気軽にどうぞ。ペー ジの一番下に記載のあるメールアドレスまで直接送っていただいても構いませ ん。

ソースパッケージ

バイナリパッケージ (Android, Zaurus 以外は当方では動作未確認)

ONScripter-EN とは、Uncle Mion さんによって英語のスクリプトがうまく 扱えるように拡張された ONScripter です。サポートされているコマンドも ONScripter より充実しています。従来の日本語のスクリプトも問題なく実行 できるようです。

特長

NScripter と比較した特長

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

その他の特長

実行方法

動作環境

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

必須

・C++ 処理系
g++ 4.4.4 (Linux)
Visual Studio 2008 C++ (Windows)
・Unicode で指定された日本語 TTF フォント(ファイル名は default.ttf に)
Independent JPEG Group
libjpeg-6b
The bzip2 and libbzip2 official home page
bzip2-1.0.5
SDL (Simple Direct Layer)
SDL-1.2.14, SDL_image-1.2.10, SDL_mixer-1.2.8, SDL_ttf-2.0.9, SMPEG-0.4.5
FreeType
FreeType 2.3.11

推奨

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

必要に応じて導入

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

当方では Windows, Linux, Android(HTC Desire (2.2)), Zaurus(SL-C700)で動作確認をしています。
またMacOS X, Android(Nexus One (2.2)), iPhone, PSP, FreeBSD, Solaris(on SPARC), Zaurus(SL-A300,SL-B500), OS/2Warp, iPod, PocketPC, Playstation3, Wii, GP2X, NetWalker, 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. ()Lua 対応
  2. ()右クリックからの windowerase を実行する時に windoweffect の効果を反映させる。
  3. ()bgcopy で取得した画像をセーブ時にファイルに保存するようにする。
  4. ()文字の影が既に描画されている文字にかぶった場合に対処する。
  5. ()正式な英語モード(english コマンド)への移行。
  6. ()existspbtn を spbtn として実装しているが、それでよいのかを検証する。
  7. ()コードの clean up。

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

技術屋きさらの箱庭
きさらさんが公開されている日記です。
影舞を利用したバグトラッキングシステムを運用していただいております。現在は、新バグトラッキングシステムに移行しています。
ONScripter のスゝメ
αβεさんによる ONScripter の導入方法・既存のゲームの動作状況・バグ報告のページです。
ONScripter を開発する上でたいへんお世話になっております。
影舞を利用したバグトラッキングシステムも運用していただいております。現在は、きさらさんの新バグトラッキングシステムに移行しています。
ONScripter に興味を持たれた方は最初にこちらのページを見ることをお勧めします。

雑多なこと

キーボードショートカット

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 コマンドを発行)

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

起動オプション

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

オプション 説明
-h,--helpへルプを表示して終了します。
-v,--versionバージョンを表示して終了します。
--cdaudioCD Audio 演奏モードに変更します。CD Audio が使えなかったとしても MP3 ファイルは使用しません。
--cdnumber cd_numberCD Audio 演奏モードにおいて、CD-ROM ドライブが複数ある場合に、何番目のドライブを使用するのかを指定します。デフォルトは0番目です。
-f,--font file使用する TTF フォントファイルを指定します。
--registry file使用する registry file を指定します。
--dll file使用する dll file を指定します。
-r,--root path使用するゲームファイルのあるディレクトリを指定します。
--fullscreenフルスクリーンモードで起動します。
--windowウィンドウモードで起動します。
--force-button-shortcutgetenter と useescspc のコマンドを無視します。つまり、マウスのクリックを強制的に esc, space, return キーに割り付けます。
--enable-wheeldown-advanceテキスト終端でのクリック待ちの際に、マウスのホイールダウン操作をクリック操作として扱います。textgosub でクリック待ちをカスタマイズしているときには効果はありません。
--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/その他画像ファイルスクリーンショットを画像ファイルとして保存している場合があります。これはゲームによって場所や名前が異なるので、ゲーム毎に対応してください。

上記のうち 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 は、現時点(2009/05/17)で配布されている最新の 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 の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 があり、またフリーの TrueType 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 を起動する前に、使用する 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.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 (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 )

英語ノベル作成

これは 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_MODEButtonLink(画像)を使用した選択待ちbtnwait, select, 右クリックメニュー
WAIT_INPUT_MODEクリックで飛ばせる待ちdelay, click, @, \
WAIT_SLEEP_MODEクリックで飛ばせない待ちテキスト文字描画

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

説明
WAIT_TIMER_MODE時間を指定した待ち、待ち中にアニメーションを実行画面効果、テキスト文字描画以外のほぼ全ての場合
WAIT_TEXTBTN_MODEtextbtnwait での待ちtextbtnwait 使用時のみ
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)
背景