12月23日
追加機能「PSP版に署名」を元に、PSP 版でビルドエラーが発生する問題を修正しました。また、署名付の PSP 版用バイナリを公開していただきました。今回の修正は PSP 版以外のプラットフォームには影響ありません。
追加機能「PSP版に署名」を元に、PSP 版でビルドエラーが発生する問題を修正しました。また、署名付の PSP 版用バイナリを公開していただきました。今回の修正は PSP 版以外のプラットフォームには影響ありません。
バグ報告「iOS 版にてオートモード・スキップが動作しない」を元に、iOS 版では SDL のジョイスティックを有効にしないように修正しました。SDL でジョイスティックを有効にすると、iOS 版の SDL ではイベントループで毎回 SDL_JOYAXISMOTION イベントが送られてきます。このとき端末を傾けると、iOS 版の SDL ではジョイスティックを傾けたと判断し、それを受けて ONScripter では傾けた方向に応じて SDLK_LEFT, SDLK_RIGHT, SDLK_UP, SDLK_DOWN キーが押されたと解釈して処理していました。そのため、端末を傾けるとキー入力が発生し、オートモードやスキップが中断されていました。ただし、iOS 版では SDL_WarpMouse() が正しく機能していないようで、SDLK_LEFT, SDLK_RIGHT は正しく処理されていないようです。今回、iOS 版では SDL でジョイスティックを有効にしないようにし、SDL_JOYAXISMOTION イベントが送られてこないようにしました。これで、端末を傾けてもオートモードやスキップが中断されることはなくなったと思います。
Android 版や iOS 版でたまに落ちることがあったので、PC 上の valgrind で調べてみたところ、以下のように既に解放したメモリに書き込む場合があったので修正しました。前回調べたときには、出力の意味を正しく理解しておらず問題に気づいていませんでした。このツールはたいへん便利です。
==28097== Invalid write of size 4 ==28097== at 0x8060201: ONScripter::mouseOverCheck(int, int) (ONScripter.cpp:734) ==28097== by 0x807385C: ONScripter::mouseMoveEvent(SDL_MouseMotionEvent*) (ONScripter_event.cpp:468)
--render-font-outline を指定した状態で、輪郭画像の幅と通常の文字画像の幅の差が奇数になる場合に、確保したメモリの範囲外に一部書き込みを行っていたバグを修正しました。
Android 版の SDK を更新して、起動時のゲーム選択画面に Render Font Outline のチェックボックスを追加しました。ゲーム選択時にフォントの輪郭を描画するかしないかを選択できます。
iOS 版の SDK を更新し、Preprocessor Macros に UTF8_FILESYSTEM を追加して、アーカイブの外にあるファイル名が日本語のファイルを読み込めるようにしました。iPad2 で某ゲームを実行したら効果音が全く鳴らなかったので気が付きました。また、Xcode 4.5 からは、ARMv7 以降、つまり iOS 4.3 以降しかサポートされなくなったため、Deployment Target を 4.3 にしました。
iOS 版の SDK を更新し、任意の場所に SDK を展開してビルドできるようにしました。今までは SDK 内の探索パスを /Users/$USER/src/... のように絶対パスで指定していましたが、相対パスに変更しました。
iOS 版の SDK を更新し、一番面倒だったライブラリのドラッグ作業をなくしてアプリの作成を大幅に簡略化しました。これまでは、シミュレータ用と実機用の両方をビルドする場合には、ライブラリを削除しドラッグし直してビルドするか、プロジェクトファイルをシミュレータ用と実機用に2つ用意する必要がありました。今回からは、Xcode ウィンドウの左上に表示される「ONScripter」の右側を iOS Device (端末が接続されている場合は端末名) か iPad 6.0 Simulator (もしくは iPhone 6.0 Simulator)に切り替えてビルドするだけで両方ビルドできます。
iOS 版の SDK を更新し、Xcode 4.5.1 の環境で iOS 6.0 用のアプリを作成できるようにしました。古い SDK では、Xcode 4.5.1 上で(少し修正して)ビルドはできるのですが、iOS 6.0 のシミュレータおよび実機では画面が90度回転してしまい正しく表示されませんでした。ただし、iOS 5.1 のシミュレータでは正しく表示されます。幸い、リポジトリ上の最新の SDL には iOS 6.0 に対応する修正が入っていたため、古い SDK の SDL/src/video/uikit/ 以下の部分だけリポジトリのものと差し替えて解決しました。
ONScripter 本体も、iOS 用でコンパイルエラーが発生するバグを修正しました。
10月19日に言及した Android 版でメモリ使用量が増える現象をよく調べると、(メモリ使用量を確認するために)ホームボタンを押して処理をバックグラウンドに移してからフォアグラウンドに復帰するときに使用メモリ量が約 5MB ずつ増えていました。ずっとフォアグラウンドで処理している分には増えないようなので、実用上はこのままでも問題なさそうです。フォアグラウンドに復帰するときに以下のエラーがログに出力されるので、このあたりが怪しそうですが、使用メモリ量が増えること以外に特に問題はなさそうなのでとりあえず保留にします。
Adreno200-ES20 <qgl2DrvAPI_glTexSubImage2D:502>: GL_INVALID_VALUE Adreno200-ES11 <qglDrvAPI_glTexSubImage2D:2055>: GL_INVALID_VALUE
Android 版で某ゲームを遊んでいたところ、起動時のメモリ使用量は 50MB 程度なのが、長時間スキップで飛ばしていくと 250MB 程度まで増えていき、そのままハングアップしてしまいました。-g オプションを付けてコンパイルし直し、以下のように PC の Linux 上で valgrind (プロファイラ)を使って調べてみたところ、文字を描画する際に TTF_RenderGlyph_Shaded() で確保したメモリを解放していなかったことが分かったため修正しました。
> valgrind --leak-check=yes onscripter -r ...
つまり、1文字ごとにメモリリークが発生していました。過去のソースを見ると、20050819 以降で発生していたようです。
しかし、これで Linux と Windows ではメモリ使用量がほぼ一定になりましたが、Android では、以前よりははるかによくなったものの、なぜかまだ少しずつメモリ使用量が増えていきます。
yesnobox 命令を実装し直し、ダイアログから「はい」と「いいえ」を選択できるようにしました。また、okcancelbox 命令を実装しました。
yesnobox, okcancelbox 命令のダイアログのボタンを少し大きくし、また右クリックで「いいえ」もしくは「キャンセル」を選択できるようにしました。ファイル名は変わっていませんが、ソースと Android 版のアプリを更新しました。この文章が載る前にダウンロードされた方は、再度ダウンロードしてください。
バグ報告「Android版での機能拡張について」を元に、textgosub を使用し、かつクリック待ち @ の後に続けて命令が記述された場合に、命令がテキストとして表示されてしまうバグを修正しました。
起動オプションに --render-font-outline オプションを指定すると、まず文字の輪郭画像(α付)を生成してそれを黒で描画し、その後に通常の文字画像(α付)を生成して上書き描画します。このとき、文字によっては輪郭が半画素ずれて描画されることがありました。具体的には、輪郭画像の幅と通常の文字画像の幅の差が奇数になる場合にずれていました。今回、半画素ずれる場合には、生成された輪郭画像を半画素ずらしてから描画するようにしました。これでどの文字も綺麗に描画されるようになったと思います。なお、明朝などの細い文字よりもゴシックなどの太い文字を使った方が袋文字の見栄えがよくなります。
Android 版の場合は、このサイトで配布しているアプリでは袋文字表示が有効になっていますが、アプリを作成する場合はカスタマイズの「文字の袋文字描画」の項で有効・無効を設定できるようにしました。アプリを作成する場合は SDK (onscripter_android.tar.gz) も更新してください。
iOS 版の場合は、プロジェクトの設定で RENDER_FONT_OUTLINE を定義することにより有効になるようにしました。定義しない場合は無効になります。SDK (onscripter_ios.tar.gz) を更新する必要はありません。
起動オプションに --render-font-outline オプションを指定することで、SDL_ttf 2.0.10 以降でサポートされたフォントのアウトライン描画機能を使い、影付き文字を黒い輪郭の袋文字として表示するようにしました。文字がくっきりして見やすくなると思います。Android 版(開発する場合は要 SDK 更新)と iOS 版ではこのオプションがデフォルトで有効になります。また、その場合 shadedistance 命令は無視されます。なお、コンパイル時に SDL_ttf のバージョンをチェックし、2.0.10 より古い場合にはこの機能は無効になります。
Dev13 さんからのバグ報告に基づき、Android 版と iOS 版以外で PDA_WIDTH もしくは PDA_AUTOSIZE を定義してコンパイルし画像の拡大縮小を行った場合に、文字位置がずれて文字が部分的に表示されないことがあるバグと、スプライト画像の下端に線が入ってしまうことがあるバグを修正しました。この線が入る問題は10年近く前から気づいていたのですが、ようやく解決です。resizeImage 関数の拡大縮小処理における resampling のバグでした。
バグ報告「bgmのノイズ、strspの挙動、autosaveoff」を元に、strsp 命令の後に getcursorpos2 命令を実行すると strsp 命令で表示した最後の文字位置が取得されてしまうバグと、pretextgosub が設定されておらずかつ saveoff 状態のときに改ページ後の最初の表示文の先頭でセーブされないバグを修正しました。
pretextgosub 命令で指定されたラベルに飛んだときに saveoff 状態にするようにしました。
提案「Android版でのパッケージダウンロード/展開についてご質問」を元に、ゲームデータのダウンロード/展開でプログレスバーが表示されている際に、プログレスバー以外の部分をタッチするとバーが消えてしまう問題に対処しました。以前 Android 2.2 で試していた時にはそんなことはなかったのですが、Y.A.M の雑記帳によると、Android Honeycomb 以降ではダイアログの外部タッチで閉じるがデフォルトになっているそうです。そこで、SDKを更新して、このサイトに書いてあるようにプログレスバーを作成する際に
setCanceledOnTouchOutside(false)
を呼ぶようにしました。ただし、動作は未確認です。
getmouseover 命令を実装しました。
Android 版をコンパイルしようとしたら、デバッグキーの有効期限が切れていました。Android 版の開発を始めてから2年が経過したことになります。~/.android/debug.keystore を削除して再コンパイルしたところ、自動的に新しいデバッグキーが作成されました。デバッグキーが変わったため、パッケージのアップデートはできません。古い ONScripter はいったんアンインストールしてから、新しい ONScripter をインストールしてください。
Android 版の起動時のゲーム選択画面から disable rescale のチェックボックスを削除しました。
バグ報告「android版でdisable rescale が動かない」をいただいていましたが、Android 版の 20120414 以降で画像の取り扱い方法が変わったことに伴い、Android 版における disable rescale の機能は無くします。現在配布しているアプリでは機能しないままチェックボックスだけが残っていますが、次回のリリースで削除します。
元々この機能は、 Zaurus SL シリーズで ONScripter を使用する際に(SDL on Zaurus のページ参照)、容量の少ないメモリ上に複数のゲームデータを記録するために実装しました。当時保有していた SL-5500 はデバイス解像度が QVGA(320x240) だったので、VGA(640x480) 用のゲームデータの場合は画像サイズを4分の1にすることができました。しかし、近年販売されている多くの Android 端末ではデバイス解像度とメモリ容量が共に大きくなりこの機能の必要性が無くなってきたことと、この機能を有効にするために描画回りのコードを複雑化したくないため、Android 版では削除することにしました。悪しからずご了承下さい。
永字八法さんのbgmのテキスト非同期フェードアウト実験に、「ただし、NSLuaを使う関係上、ONScripterは置いてきぼり。グッバイ。」と書かれていました。しかし ONScripter は以外とやればできる子です。NSLua のサポートが不十分なためできないこともありますが、Makefile で Lua を有効にすればこの Lua のサンプルは動きます。ONScripter 側の Lua の初期化部分にバグがあり一カ所直しましたが…。
提案「Makefile.Linux の定義の分割」を元に、Makefile.Linux の DEFS, INCS, LIBS 等の定義を機能別に分けました。
textbtnwait 命令を実行するとテキストが消えてしまうバグを修正しました。このあたりは処理が混沌としているので、他でエンバグしているかもしれません。
バグ報告「Makefile 中の $(LD) 定義の修正」を元に、Makefile.onscripter のリンカの指定を以下のように変更しました。
$(LD) $(LDOUT)$@
Makefile.Win でのみ LDOUT を以下のように定義しています。
LDOUT = /out:
Windows でコンパイルする場合には以下のように $@ の前にスペースが入ってはいけないため、これまでは Windows と Unix 系の Makefile を共存させるためにやむを得ずバグ報告のようにしていました。
link /out:$@
バグ報告「「オーシャンランチアンティーク」動作不可」を元に、useescspc 命令が使用されておらずかつ ESC キーが押された場合に、bexec の文字列変数に RCLICK を設定するようにしました。Android 版でソフトウェアボタンの右クリックが押された場合にも RCLICK が設定されます。
<と>で囲まれたテキストボタンに部分的に対応しました。解釈するだけでボタンとしては機能しません。
バグ報告「「オーシャンランチアンティーク」動作不可」を元に、少なくとも Android 4.0.3 において、ONScripter::flushDirect() で更新領域の面積が0の場合に落ちるバグを修正しました。
Android 版のアプリと SDK を更新しました。これまでは、ホームボタンや電源ボタンを押してアプリを中断しても、音楽再生スレッドは停止せず音量のみ0にしていました。今回から、AudioThread::fillBuffer() が呼ばれたときに、中断中は 500ms のスリープを繰り返すようにしました。これによって、手元の端末では中断時の CPU 使用率が 95% 程度だったのが、5% 程度になりました。中断しているときの電池の持ちがよくなると思います。
追加機能要望「androidでのホイールアップ/ダウン」を元に、Android 版のボタンに「上ホイール」と「下ホイール」を追加しました。回想モードに入りやすくなると思います。また、「設定」の「ボタンを非表示」と「画面を中央に表示」は統合し、「ボタンを非表示」にしたときに同時に画面も中央に表示されるようにしました。
Android 版の色深度を 16bit (RGB565) から 32bit (ABGR8888) に変更し、また使用する SDL_Surface に SDL_BLENDMODE_NONE を指定して SDL 側での描画(転送)の高速化を図りました。SDK を更新してください。ただし、ONScripter 内部で画像を保持するために必要なメモリ量が2倍に増えます。
Android 版と iOS 版において、これまでは ONScripter 内部で保持する画像の解像度をデバイス画面の解像度と同じにしていましたが、今回から元の画像ファイルの解像度と同じにしました。最後の表示の段階で、OpenGL ES の線形補間拡大縮小機能を使ってデバイス画面の解像度に合わせます。これによって、ゲームで想定している画面解像度がデバイス画面の解像度よりも小さい場合には画像保持に必要なメモリ量がこれまでよりも減り、逆の場合には増えます。また、内部で解像度変換をしない分速くなりますが、デバイス画面の解像度の方が小さい場合には画像合成にかかる時間が増えます。(なお、従来の iOS 版では、デバイス画面の解像度の方が大きい場合にのみ上記のように表示の段階で拡大縮小していました)
キーボードショートカットもしくは Android 版のソフトウェアボタン(「次のボタン」「前のボタン」)を使ってボタンを選択するときに、確実に前後のボタンに移動できるようにしました。
iOS 版において、iPhone 上で動かしたときに ofscpy や getscreenshot 命令で画像が正しく取得されないバグを修正しました。
iOS 版において、タップ位置の取得に関するバグを修正しました。
Android 版において最新の SDK r18 と NDK r7c で動作確認をしました。
バグ報告「忘れ物」を元に、Android 版で新規に追加したボタンの幅と高さを設定し忘れていて、5番目と6番目のボタンが小さくなっていたバグを修正しました。ファイル名は変わっていませんが、修正してアプリと SDK を更新しました。この文章が載る前にダウンロードされた方は、再度ダウンロードしてください。
バグ報告「ウソと手紙と名探偵が動作しない」を元に、shadedistance 命令が実行ブロックにあっても実行されるようにしました。
Android 版において最新の SDK r17 と NDK r7b で動作確認をしました。
BTS のトップ画面にアクセスしようとすると、データベースにアクセスするところでエラーが起こり画面が表示されなくなっていました。個別のバグ報告は表示できます。以下のファイルを削除したら直りました。
kagemai/project/onscripter/cache/cache.pstore
バグ報告「android版でdisable rescaleを使った場合のロードの際テキストウィンドウが乱れる」を元に、setwindow 命令で画像ファイル名を指定している状態でセーブファイルを保存した場合に、そのセーブファイルを読み込むときに AnimationInfo が不正にキャッシュされてしまい画像ファイルが正しく表示されないことがあるバグを修正しました。
バグ報告「BGMがループしない」を元に、先頭に _ が付いた命令を実行するときに正しく命令が解釈されないことがあるバグを修正しました。
バグ報告「ハーバーランドでつかまえて」を元に、setwindow 命令で画像ファイル名指定から透過度指定に変更し、さらに前回と同じ画像ファイル名指定に変更した場合に、落ちてしまうことがあるバグを修正しました。
バグ報告「ダウンロード中に戻るボタンを押し、再度起動すると不具合?(Android)」を元に、Android 版の SDK を更新して、ゲームデータダウンロード中およびゲームデータコピー中のプログレスバーが表示されているときには、ハードキーの BACK と SEARCH を受け付けないようにしました。この問題は前から気にはなっていたのですが、報告がきたのを機に直しました。
バグ報告「gettagで負数を取得できない」を元に、gettag 命令実行後のスクリプト位置や gettag 命令の整数値取得に関するバグを修正しました。
ゲームデータを内蔵した iOS 版の NOeSIS -嘘を吐いた記憶の物語- が App Store で公開されたので、アップデートしてみました。しかし、アップデート自体は問題なくできたものの、セーブファイルが消えてしまいました(泣)。MAGIC_FILE を更新すると /Library/Caches/ONS をフォルダごと消去して、新しくゲームデータをコピーする仕様になっていたため、セーブファイルも一緒に消去されていました。消去せずゲームデータのみ上書きする方がよかったですね、申し訳ありません…。消去ではなく上書きするように SDK を変更しました。
Android 版において拡張ファイルをダウンロードする場合に、実際には拡張ファイルは外部ストレージ(SDカードなど)にダウンロードされるにも関わらず、アプリと拡張ファイルの合計サイズ分の空きが内部ストレージにないと Android マーケットでインストールできないと判断されてしまうようです。そこで、SDK の設定ファイルを以下の赤字のように修正し、Android 2.2 以上でのデフォルトのインストール先を外部ストレージ優先に変更しました。
onscripter_android/AndroidManifest.xml:
android:versionCode="20120310"
android:versionName="20120310"
android:installLocation="preferExternal">
onscripter_android/project.properties:
target=android-8
おそらくこれで、Android 2.2 以上では内部ストレージが少なくてもインストールできようになると思います。こうしてもできませんでした(泣)。
なお、上の設定でも、アプリは従来どおり Android 1.6 以上で動作します。また、Android SDK は Android 4.0.3 (API 15) と Android 2.2 (API 8) の SDK Platform をインストールしてください。Android 1.6 (API 4) の SDK Platform は不要です。
困りました。拡張ファイルのサイズが 100MB 超など大容量になると、端末によっては内部ストレージの空きが少ない場合にインストールできないということになりそうです。手元の HTC Desire は内部ストレージの空きが 20MB 程度なので厳しいです。ONScripter の場合、拡張ファイルは自前のダウンローダで SD カードに直接ダウンロードされるので、Android マーケットアプリのチェックさえ回避できればよいのですが…。
インストール失敗直後のログに以下のメッセージが出力されていました。アプリ+拡張ファイル(容量=35584490)分のキャッシュを内部ストレージ(空き=23707648)に確保しようとして失敗するようです。最近の端末は内部ストレージに余裕があると思うので、こういう仕様でも仕方がないのかもしれません。
I/installd( 75): free_cache(35584490) avail 23707648 E/installd( 75): cannot open /data/secure/data/: No such file or directory E/installd( 75): Couldn't openat cache: No such file or directory
Android 版において、ゲームデータを Android マーケットの拡張ファイルとしてダウンロードできるようにしました。最新の SDK を使用して、ゲームデータの配布方法のパターン1を参考にアプリを作成してください。これで別途サーバを用意してゲームデータをダウンロードする必要はなくなるはずです。従来の自分でサーバを用意してそこからダウンロードする方法も利用できます(パターン3)。また、この拡張に伴い暗号化 zip のサポートを中止しました。ただし、拡張ファイルのダウンロードについては動作確認をしていないため、どなたか試していただき報告していただければ幸いです。うまくいかない場合は、直後の aLogcat のログを送ってください。「Androidアプリの容量制限緩和(50MB→4GB)に伴う要望」において動作確認をしていただきました。
拡張ファイルのダウンロードについては資料があまりなく、また手元では動作確認ができないため、URL を取得する部分だけ提供されたライブラリを使用し、ダウンロードと zip の解凍については実績のある自前のプログラムをそのまま流用しています。
iOS 版の NOeSIS -嘘を吐いた記憶の物語- が無事 App Store で公開されました。手元の iPad2 にアプリをインストールしたところ、問題なく動作しています。1024x768 の画面いっぱいに表示され非常に綺麗です。
iPad2 で他のノベルゲームを遊んでみようと思い App Store を見ていたら、容量 100MB 超のアプリがいくつもあります。え?これありなの?どうやら、3G 回線を使わないのであれば、容量が大きくても(2GB まで?)大丈夫なようです。というわけで、iOS 版にゲームデータ内蔵機能を追加しました。20120310 以降の ONScripter のソースを使用し、HAVE_CONTENTS と MAGIC_FILE を定義してアプリを作成してください。これで別途サーバを用意してゲームデータをダウンロードする必要はなくなるはずです。
Android 版において、「ゲームデータの配布方法」の「パターン2:アプリに内蔵する方法」に「SD カードにインストール可能なアプリの作成法」を追加しました。デフォルトではアプリは内部ストレージにインストールされますが、新しい方法で作成したアプリは SD カードに優先的にインストールされるようになるため、特にゲームデータを内蔵する場合に内部ストレージを圧迫しないですむようになります。ただし、この方法で SD カードにインストールできるのは Android 2.2 以降です。Android 2.2 未満の場合は、このように設定しても内部ストレージにインストールされます。
iOS Data Storage Guidelines によると、ダウンロードするゲームデータは /Documents ではなく /Library/Caches に保存しないといけないようです。ONScripter のソースと iOS 版の SDK をそのように修正しました。
バグ報告「Double Free when quitting the game」を元に、end 命令を実行した場合などに ONScriper::quit() と デコンストラクタで二重にメモリが解放されるバグを修正しました。
Feng さんからのバグ報告を元に、cell 命令などの後に print 命令を実行しても効果が現れないバグを修正しました。
iOS 版において、ゲーム画面がデバイス画面の中央に表示されるようにしました。
Retina display に対応するために、「Bug 1394 - Fixes for SDL's handling of "Retina" display on iOS devices」のパッチをあてて iOS 版の SDK (onscripter_ios.tar.gz) を更新しました。これで iPhone 4S でも正常に表示されると思います。シミュレータ上で Retina display を試すには、iOS シミュレータが立ち上がった後に、iOS シミュレータのメニューの「ハードウェア」->「デバイス」から iPhone(Retina) を選択してください。
バグ報告「長すぎる行がある場合の動作」を元に、SDL-1.3 の SDL_UpdateRect() では描画範囲のチェックをしていないようなので、ONScripter::flushDirect() で事前に描画範囲を画面サイズでクリッピングするようにしました。
回想ページでルビが表示されないバグを修正しました。
20120204 の修正漏れで、USE_SDL_RENDERER を定義した場合の描画に関する軽微なバグを修正しました。
ちなみに、ONScripter は Linux (Debian Squeeze), Android (HTC Desire (2.3)), iOS (iPad2), 時々 Windows で動作確認をしてからリリースしています。
バグ報告「PC上でUSE_SDL_RENDERERを有効にした際の問題」を元に、内部画像のフォーマットを以下のように変更しました。レンダラーの 32bit 画像・16bit 画像は USE_SDL_RENDERER を無効にした場合、それ以外は USE_SDL_RENDERER を有効にした場合を指します。
フォーマット | レンダラー | 対象 OS の例 |
---|---|---|
ABGR8888 | OpenGL ES 1.x, OpenGL ES 2.x | iOS |
ARGB8888 | OpenGL, Direct3D, 32bit 画像 | Windows, Linux, MacOSX |
RGB565 | 16bit 画像 (BPP16 を定義) | Android, Zaurus |
動作確認をしていませんが、1年ぶりに Zaurus 版のパッケージも更新しました。
iOS 版において、USE_SELECTOR を定義してコンパイルすると、起動時にゲームを選択できるようにしました。ゲームデータは、iExplorer などを使用し、Documents 直下に任意の名前のフォルダを作成してその中に置いてください。ただし、ゲームデータがあるフォルダが Documents 直下に1つしかない場合は、無条件にそのフォルダにあるゲームが実行されます。
ZIP_URL と USE_SELECTOR を併用することもできます。ZIP_URL で指定されたゲームデータは Documents/ONS フォルダに展開されます。併用した場合、もし Documents 直下に他にフォルダがなければ、ダウンロードしたゲームが無条件に実行されます。ユーザがフォルダを追加した場合は、起動時にゲーム選択画面が表示されます。
iOS 版において、右クリックと早送りに対応しました。指2本タップで右クリック、指3本タップで早送り(ctrl キー)になります。
BTS の全文検索が、いつの間にやら以下のエラーが出て使えなくなっていました。
undefined method `quote' for #<DBI::DBD::Mysql::Database:0xb6f89308> (NoMethodError)
[ruby]DBI経由Mysqlのquoteメソッドを元に、dbistore3.rb の最初の方に以下のコードを追加して解決しました。
dbistore3.rb:module DBI::DBD::Mysql class Database < DBI::BaseDatabase def quote(value) case value when String "'#{@handle.quote(value)}'" when DBI::Binary "'#{@handle.quote(value.to_s)}'" when TrueClass "'1'" when FalseClass "'0'" else super end end end end
ONScripter は主に Linux 上で開発していますが、これまで Android 版を開発するために SDK r10, NDK r5b を使っていました。ところが、最新の SDK r16, NDK r7 にしたところ、以下のエラーが出てコンパイルできなくなっていました。
[javac] onscripter_android/src/org/bouncycastle/crypto/tls/test/AllTests.java:11: パッケージ junit.textui は存在しません。 [javac] junit.textui.TestRunner.run(suite()); ...
バグ報告「Android用のコンパイルできません」と同じ現象です。Windows の場合は SDK を r15 にしたところ解消しましたが、Linux では r13~r16 でエラーが発生します(r10 では大丈夫です) 。原因は分かりませんが、junit に関連する部分は使われていないようなので、junit に関連するソースを全て削除して onscripter_android.tar.gz を更新しました。現在は、junit は必要なく、Windows でも Linux でも SDK r16 で開発できます。
ONScripter on iOS のアプリの作成法を簡略化しました。
iOS 版に初回ダウンロード機能を付けました。これで公開できるアプリを作成することができるようになったと思います。ただし、プログラム側の問題で審査に通らない可能性があるので、どなたか試していただけるとありがたいです。
バグ報告「バージョン20120111での速度低下」を元に、画像の色の並びを、USE_SDL_RENDERER が定義されていれば (A)BGR に、それ以外では (A)RGB になるように変更しました。
ONScripter on iOS を始めました。開発は MacOS X Snow Leopard 以降の XCode 4.2 で行います。正規の方法でインストールした iPad2 の実機、および XCode 4.2 の iOS シミュレータ(iPhone, iPad)で、動画再生を除き正常に動作することを確認しています。ただし、App Store の審査に通るかどうかは試していないので分かりません。審査に通った方はご報告いただけるとありがたいです。なお、α版につきダウンロード機能はまだ未実装です。
解像度が 800x600 までのゲームでしか試していませんが、iPad2 実機の 1024x768 の解像度をフルに使って(OpenGL ES によるリニア補間スケーリング)非常に綺麗かつ快適に動作しています。HTC Desire (800x480) よりも動作は快適です。ただし、現時点では右クリックに相当する機能がないため、ゲームによっては進行に支障をきたす場合があります。時刻の取得も機能していませんでした。
内部の 16bit および 32bit 画像の色の並びを (A)RGB から (A)BGR に変更しました。
本当はダウンロード機能まで付ける予定でしたが、Objective-C を使ったことがないため、見つけたサンプルが全く理解できず、もう少しかかりそうです。
バグ報告「getcursorpos2とandroidについて」を元に、文字の縦方向の描画位置を調整しました。
USE_SDL_RENDERER を定義してコンパイルすると、SDL-1.3 以降の2D描画ルーチン(SDL_render.h)を使用して描画するようになります。(定数名を USE_SDL_WINDOW から変更してソースパッケージを同じ名前で作り直しました)
USE_CDROM を定義してコンパイルしたときのみ CD-ROM 音源を使用できるようにしました。これに伴い、Android 版の SDL ライブラリから CD-ROM 関連のソースを削除しました。
早いもので、ONScripter の開発を始めてから10年が経ちました。最初は個人的に楽しむために作ったプログラムでしたが、それに飽き足らず公開したところ、国内外の多くの方からバグ報告やパッチをとおして開発を支援していただくようになり、おかげで当初は考えもしなかった多くのプラットホームで動作するようになりました。オープンソースの良さを実感しています。
この1年半は Android 版に力を入れていましたが、安定して動作するようになり、また ONScripter を使っていただいたNOeSIS -嘘を吐いた記憶の物語-が非常に高い評価を得ているようでたいへんうれしいです。
Android 版は一段落ついたので、今は別のプラットホーム向けに試行錯誤をしています。
バグ報告「スクリプトを読まずに終了するとbus errorが発生する」を元に、エラーが発生しないように修正しました。
バグ報告「Android用のコンパイルできません」を元に調べてみたところ、どうやら最新の android-sdk-r16 を使ってコンパイルすると、検索パス上に置いた junit-4.*.jar がなぜか見つからずに失敗するようです。android-sdk-r15 では成功するのでこちらをお使い下さい。