AirNovel覚書

Adobe Air必須ですが、WinXP/Mac10.6~/Linuxでも動くというクロスプラットフォームのゲームシステムです。ブラウザでも勿論公開できます。その気になればiPhoneやAndroidでも動かせます。(公開にお金はかかるけど)

 Googleさんのとこでは、一度お金がかかりますが、2014年になり、アマゾン APP STOREで無料で登録できるようになったようです。特に容量制限もないようで、シェアウェアを販売する時は手数料が引かれる仕組みのようです。

自動アップデートなんかにも対応しており、とても便利です。但しActionScriptが理解できていないと、凝ったことはできません。主にプラグイン頼みになるからです。吉里吉里の経験がある人なら、ある程度使いこなせると思います。

AIRNovelをさわろう!

初心者には本当にハードル高いのですけれど、少しでも助けになればと思い、NecromanticHalloweenのソースを公開いたします。スクリプトの流用は構いませんが、画像と音の素材利用は許可しません。
DL(SkyDrive)

●環境作り

まずね……、環境を作るとこから大変なのね。箇条書きにすると
  • Adobe Air(プレイヤーも必須)
  • テキストエディタ(wordやメモ帳不可)
  • ANBooks
  • Flex_SDK(ビルドして、Airアーカイブで配布するのに必要)
  • Apache-ant(〃。JDKは開発環境であり、実行環境であるJREを含む)
  • JDK(〃。7でも動く)
すみません。JDK必要でした!
 補助ツールとして、ANBooksはビルドしたアプリの完全互換と言う訳ではありません。プロジェクトを新規に作る時、Anbooks形式でまとめる時にも必要。
エディタはサクラエディタがお勧め。入力補完とキーワードヘルプが用意できて、私はNscripterでも使っています。
 なお文字コードは全てUTF-8を指定して下さい。改行はLF(Linux用)です。
※Anbook形式で配布する場合は、プレイヤーにもAnbooksをインストールする必要があります。

●パスの設定

これもかなり重要です。SDKやAnt、JDKの絶対パスは、なるべく空白スペースのない場所に置きます。エラー防止のためです。システムの環境変数の設定もまた初心者には大分ハードルが高いですね……。
※ただ最新版では、ANBooksが半自動で環境設定を行ってくれます。それでも動かない場合、以下のように進めて下さい。
 以下は項目がなければ作って下さい。
  • ANT_HOME にantまでのパス
  • JAVA_HOME にjdk(数字)までのパス
  • PATH に apache-antまでのパスと、jdk(数字)までのパス
を追加して下さい。**パスとパスと区切りには必ず;を入れること。最後には付けないで下さい。**例として、PATHに、%ANT_HOME%\bin と %JAVA_HOME%\bin と記述すれば、記述ミスが減って良いかもしれません。
 Airアーカイブで配布する場合には、コマンドライン(cmd.exe)が使えなくてはなりません。
cd (指定したい場所)
cd /d e:
以上のように、/d ドライブ名: を後ろに付けるとドライブ間の移動ができます。
pushdを使うと更に便利な移動ができます。フォルダ移動どころか、なんとドライブをまたいだ移動までできてしまいます。たった一度で。
 pushd (指定したい場所)
 更にpopdなるものを使うと、移動前の場所に戻ることができます。便利だね!

●書き換えの必要があるもの

  • config.anprj
  • prj-app.xml
後はAnbooksに従って、項目を埋めていけばいいと思います。分からなければAirNovelの開発ページの通りにやれば、間違いは起きないと思います。

●スクリプト作業

いきなり難しいことから始めてはいけません。現在用意されているスクリプトや素材を書き換えることから始めましょう。ちょっといじっただけでも訳が分からなくなります。
一時変数の一括消去命令はありません。

AirNovelはadd_layした順に、レイヤーが上へ積み重なる方式です。これを理解していないと、後で「何で表示されないの?!」ということになります。
 表示されていない場合にチェックするべきことは、visible=true/page=fore、そして重なり順です。下のレイヤーをどうしても表示したければ、float=true属性が使えます。
何故かマウスがレイヤーの後ろに行ってしまうことがあるようです。mouseタグでautohide=ture にしておけば、動かした時にとりあえず前面に表示されるようです。

吉里吉里と違って、IFやELSEは使えず、代用としてCONDのみ使えます。IF・ELSE・ELSIF対応しました! ワーイ! 条件分岐、書きづらかったのが、やっと見やすくなるウ!
 私は「||と&&」が、「|と&」と同じものだと思ってましたが、違いました。一応、複数条件も使えます。

キーとかマウス入力を受け取りたい場合は、event命令以外ありません。例えば、最初に「右クリックされたら*AAAラベルに飛ぶ」とか、最初に定義づけする必要があります。
 global=true以外は、飛んだ後にeventの設定は破棄されます。globalはそのまま残ります。
 またイベントは文字レイヤーが受け取るものであるらしく、発生有無の切り替えもできるらしいです。

selectタグのcall = true属性はラベルから戻ってきて[s]に達すると、操作不能となる。結局のところ、selectを設定したラベルまでjumpする必要があります。

AirNovelでは、文字の大きさや色は指定できますが、太字の指定はまだできません。

add_faceは、layタグのface属性で指定する名前を登録するためのタグにすぎません。間違えやすいので気を付けて下さい。

for_call命令もfnを指定しなかったために、エラーになったことがあります。

結構ハマったのがfadeout系命令。これはBGM切り替えしても関係なくフェードアウトしちゃうので、高速スキップした時に、止めてほしくない方のBGMを止めてしまいます。wb命令を必ず挟むように。

意外と大事なのがjoin=trueの属性。これはプラグインの読み込みで重要でした。読み込みが間に合わない場合によくエラーになりますので、画像にも使うかもしれません。

 unloadpluginは、ほとんど使うべきでないタグです。1度でも破棄してしまうと、再ロードしたところで追加した命令が使えなくなってしまうからです。

●テスト

Anbooksで配布予定の方は、Anbooks上で実行できれば問題ありません。
Air配布する予定の方はコマンドラインを立ち上げて、ゲームの作業フォルダ(config.anprj直上フォルダ)をカレントパスにした上で、antを入力すればビルドを実行します。何の問題もなければゲームが起動するはずです。

 もしもFailedの文字があれば失敗しています。エラーの文字を読み取り、記述ミスなのか、設定ミスなのか、パスの指定が間違っているかなどの判断をします。エラーが切れて読めないときは、AlconというAirデバッグツールを使えば、長いエラーも表示されます。

●パッケージングできない場合

えー、最近半日ほどハマりました問題について書きます。これのひどいところは、エラーが分かりにくいところですね。デフォルトの未改造プロジェクトがパッケージングできるのに、自分のはできない場合、これを疑いましょう。

注意点としては、サブフォルダを使っている時です。ゲームプロジェクトのディレクトリがあて、またその中にBGMだとか背景だとかのディレクトリがある訳です。
 登場人物が多い場合は更に、立ち絵のキャラごとにディレクトリ用意しますよね? そこに問題があった。
 何やかんやで設定などを自動的に読み込んでくれるAirNovel様ですが、build.xml の以下のコードにサブフォルダが含まれていると、パッケージングできません。

<arg line="${app_name}.swf config.anprj icon album bg bgm config fg fg\aaa fg\bbb img menu plugin scenario se system"/>

このfg\aaa などの部分がボトルネックになっています。config.anprj は一切いじらず、build.xml のコードのみをいじって下さい。
 つまり前の分を修正すると、こうなります。

<arg line="${app_name}.swf config.anprj icon album bg bgm config fg img menu plugin scenario se system"/>

これで作られたairファイルを、一度インストールしてみて、正常に動作しているようであれば問題ありません。私はこれで直りましたので、更にエラーがあっても対処できません……。

●プラグイン

AirNovel単体ではできない、ActionScriptでしかできないことをさせるために作るのがプラグインです。
 最初は丸写しして、他のプラグインソースと見比べつつ、AirNovelの「プラグインの自作」とにらめっこすれば分かってくると思います。
 なお var num = AnLib.getVal("tmp:num")という使い方になります。ASでは、()関数の尻に:Booleanなどが付く場合は戻り値が必要であり、:voidとすれば戻り値はいらなくなります。
一応、ミニゲーム用に作ったActionScriptのプラグインも公開しておきます。但しFLAの公開はしません。
パズルプラグインのソース(SkyDrive)

●メンテナンス

環境は意外と頻繁に更新されるので、いちいち面倒に思う時があります。うちのWindows8.1はなぜか、Anbooksのインストールをエクスプローラ+管理者実行でないと認めてくれないし。
 あとFlexSDKの更新の失敗が続いて、心が折れそうになりました。……これは単純にSDKの空フォルダだけ残して、中身を全消ししておけば失敗はなくなりました。気づくのにかなりかかりました……。
 環境の更新があった場合にAnt実行すると、必ずインストールしようとしてエラー吐いたり。

更に追記。意外とメンテナンスが面倒だった。と言うのも環境更新後にAdobeさんが細かな仕様変更でもしているのか、以前パブリッシュしたActionScript入りのSWFが実行できなくなった。
 仕方なく一度パブリッシュし直すと嘘のようにエラーが出なくなった。……何じゃこりゃ。Adobe次第ってことかよー。
 Nscripterや吉里吉里はそういう不安定さはなかったので、盲点やった……。頻繁に更新があるって言うことは開発に意欲的なのだろうけど、逆に言えば、制作環境がすぐに古くなってしまう。メンテナンスも必然的に多くなってしまう―。
 作ったら作りっぱなしでも、しばらく動くといいのだけどー。制作中に自分の環境でいきなり実行できなくなると焦る。

更にビルドの際に、以下のエラーに出会った方。
[exec] error while loading initial content
[exec] Result: 9
こいつはバージョンエラーらしいので、
<application xmlns="http://ns.adobe.com/air/application/(数字)">
の数字の部分を、AdobeAir最新版の数字に更新してやれば済む話らしい。解りにくいったらないよ。

●公開前に必要そうなもの

ANCoder(暗号化):署名もマニュアル通りにやれば、大体できます。
自動アップデートもマニュアルに記載されており、ちょっと書き換えて、自分のサイト内にでもUPすれば対応できるでしょう。
 大事なのはVer.xmlの場所をゲーム本体が調べられること、Ver.xmlにダウンロードできるファイルのURLがあること、バージョンを正しく記載すること。

このブログの人気の投稿

VisualStudioCode

お茶会への招待状

アピスラティオン