Hatena::ブログ(Diary)

senzogawaのNな日々 このページをアンテナに追加 RSSフィード

2004 | 11 | 12 |
2005 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 12 |
2011 | 01 | 03 | 04 | 05 | 06 |
2012 | 01 | 08 | 09 |
2013 | 02 |

2011-06-06

NScripterからXNovelへの移植

|  NScripterからXNovelへの移植を含むブックマーク  NScripterからXNovelへの移植のブックマークコメント

 twitterではさんざんつぶやいていたので、ここ見るような人は知ってると思うが、NScripterで書いたスクリプトiOS系端末で動作するXNovelというアプリケーション向けに移植する、というのをやっていた。

 結論から言えば、XNovelの持つ機能をそれなりに網羅する程度のものはできた。以下のツールページに置いてある。

http://senzogawa.s90.xrea.com/tool.html

 album機能とか、nav要素のsave属性とか、fg要素の位置指定とかには対応する予定は無い。気が向くか、要望があれば考える。


 で、移植作業だが、以下の手順で実施した。

  1. 自作命令の削除
  2. 非対応命令の削除
  3. 進行・改ページクリック待ちの削除
  4. 逓減select文の展開
  5. if文の調整
  6. XNovel向けアプリ情報の設定
  7. 背景画像の解像度変更
  8. 立ち絵画像のY位置調整
  9. スタッフロールのムービー化

 製作物は以下で公開中。*1

http://shimanishi.net/gss/mobile/xn/index.html

 以下、詳細についてNScripterでの製作者向けに記述していく。

自作命令の削除

 要するにdefsubとgosub命令を削除した。実際には変換ツールにコメント削除機能を付けた*2ので、コメントアウトだけだ。

 移植元のスクリプトが古い(defsubが追加されたくらいの時期)ものだったし、凝ったエフェクトは入れてないので特に難しくはなかった。

 具体的に言えば、自作命令の命名規約に従い、Devasというツールでがっつり変換。


非対応命令の削除

 主にquakeとcaption。変換ツール上はcaptionは選択肢の見出しになるようにしたが、選択肢の見出しとしてはかえって混乱しやすい気がしてやめた。これもDevasであっさり変換。

 これもコメントアウトしておき、変換ツールで削除。


進行・改ページクリック待ちの削除

 全画面が使えない以上、linepageにすべきと判断し、クリック待ちは全削除した。

 NScripterと異なり、テキストウィンドウをはみ出しても怒られないので、テキストの調整はあまりしていない。


逓減select文の展開

 選んだ項目が消えていくselectは、NScripterだと変数を利用し、文字列を空にすることで実装することが多いと思うが、XNovelは現状は選択肢文字列に変数が使えないようなので、一度選んだ選択肢が出てこないようにif gotoで展開。

 特定の選択回で出現する選択肢もあり、tablegotoと組み合わせて無理やり実現した。

 また、選択肢が4個しか使えないという仕様も引っかかり、選択を2ページに分ける対応もした。

 ぶっちゃけ今回の移植は変換ツールの作成を除いては、ここが一番の難関だった。


if文の調整

 ifの条件式が「>=」という書き方が使えなかったりしたので、条件的に問題ないと判断して「!=」に書き換えた。

 あと「=」は変換ツールが対応できていなかった*3ので、「==」に書き換えた。


XNovel向けアプリ情報の設定

 これは変換ツールを作った時点でstraliasを使うことにしておいたので、単に書くだけだった。

 具体的な内容は変換ツールに同梱したサンプルファイルを参照。


背景画像の解像度変更

 単に640x480を480x320に変換しただけ。

 twitteriPhone4時に密度2倍の画像を利用する方法を教えてもらったが、そのままでも気にしなくていいらしいのとイベント絵が無いので特に対応しなかった。


立ち絵画像のY位置調整

 まず、縦画面だと配置上難しいので横画面に限定した。

 XNovelのfg要素yoko_pos属性は、1から9の値を取るが、NScripterのような下端指定がそれだけではできない。

 1,2,3だと上端合わせになり、画面上からはみ出るサイズのキャラクターは画像の頭を削る必要がある。

 7,8,9だと下端合わせになり、画面下からはみ出るサイズのキャラクターは画像の足を削る必要がある。


 というわけで画像を加工せずに位置合わせが可能な4,5,6を利用することにした。*4

 具体的には、大体の位置を決めて画像に透過部分を付加ことで調整した。

 要するに中央合わせになるので、上に動かしたかったら上に付加、下に動かしたかったら下に付加すればよい。


スタッフロールのムービー化

 これは原作者に作ってもらったのを突っ込んだ。

 受け取ったのはMP4のSimple 640x480だったが、iPod Touchで再生できずにブラックアウトする現象が発生したため、H.264のBaseline 480x320に変換して事なきを得た。


まとめ

 なんか案外面白かった。

 変換ツール作成から移植にかけて実質1ヶ月程度なので、まあまあの開発速度と言えよう。

 変換後のhtmlファイルは一切手を加えていないし、速攻で作った割りにはそれなりの品質だと思う。

 NScripterで書くこともできることを証明できたので、iPhone向けにノベルゲームを作成する人が増える・・・かもしれない。

*1:30MBを超えるサイズなのでダウンロード失敗しやすい。また、XNovelが事前にインストールされてないとダウンロードできない。

*2:NScripterScriptPorterの「コメントを出力しない」にチェック

*3:気が向けば対応する。

*4:NScripterScriptPorterでは「下端基準を指定」をチェック、下端基準に「中(4,5,6)」を設定

トラックバック - http://d.hatena.ne.jp/senzogawa/20110606