AIMS ver1.91bを公開しました。ダウンロードページへどうぞ。
ご報告頂いた不具合1点に対処しました。たった1点ですが致命的だったので取り急ぎ。
複数のアクターでスレッドを起動した場合、そのスレッドがGCに巻き込まれて途中消滅する場合があったのをFIXしています。
AIMS ver1.91bを公開しました。ダウンロードページへどうぞ。
ご報告頂いた不具合1点に対処しました。たった1点ですが致命的だったので取り急ぎ。
複数のアクターでスレッドを起動した場合、そのスレッドがGCに巻き込まれて途中消滅する場合があったのをFIXしています。
AIMS ver1.91を公開しました。ダウンロードページへどうぞ。
頂いた不具合に対処したリリースです。ずいぶん間が開いてしまった割に小幅の更新で恐縮ですが、その理由はこの先で。
sendMessageで戻り値が得られないバグを修正した他、若干の機能追加・修正を行っています。詳しくはリリースノートをごらんください。
3/13追記:昨日公開のv1.90ですがEXEファイルのビルドミスにより、一部機能がリリース通りに動いておりませんでした。本件を修正したAIMS v1.90aを公開しましたので、お手数ですがダウンロードをお願いします。
AIMS ver1.90aを公開しました。ダウンロードページへどうぞ。
色々今後に向けてどうのこうのしている途中のバージョンです。追加修正が山ほどあるのですが、特に大事なところだけ載せます。詳細はリリースノートをご確認ください。
zip公開版としてはv1.50からかなり間が開いておりましたが、その間に一部互換性に関わる重要な変更が入りました。
一番デカい変更です。動作速度がやや向上することが期待されますが、一部Lua5.2の仕様を取り入れている関係で互換性の問題が発生しています。(基本同等の動作になるようにしていますが)
リリースノートの方で詳しく書いていますので必ずご確認ください。
簡単に言うとシーンクラスの各関数でwait()関数が使えるようになったということです。これまで別途コルーチンを呼んでいたような処理の多くがシーンクラスでまとめて記述できるようになることが期待されます。
互換性については万全を期しましたが1フレーム単位でのタイミングズレなどはあるかもしれません。タイミングに対してシビアなコーディングをしている場合はご注意ください。
なおアクターの方については扱いはこれまで通りです。
これまではLuaコードを丸ごと別スレッドで動作させていたのですが、メインスレッドのメモリ空間にアクセスしてしまいLuaが異常終了する事例が発生しておりました。
原因としてはスレッドセーフでないLuaを無理矢理マルチスレッド動作させていたせいだった、ということで、ローダースレッドの処理を大幅に変更しました。
具体的には下記のような挙動に変更となります。
スレッド内でLuaコードを実行しないようにしたのが最大の変更です。コード自体は原則変更不要ですが、読み込みのタイミングがズレている都合、下記のような問題があります。
これまで正しく動いていたものがエラー落ちするような問題はないと思いますがご注意ください。
これはご覧の通りというほかありません。これまでのスクリプトをそのまま動かす分には一切影響しないはずです。v1.60以降はレイヤー指定の範囲は0~15となります。
あとは機能追加類となります。続きで簡単に紹介します。
※2013/9/3更新:Gumroadの機能追加に対応して、現物送付の手続きを変えました。
最近急激に流行りだしたgumroadなるサービスの実験を兼ねて、一昨年末に作った「ゲームエンジンAIMS」をDL販売する試みを始めました。
直接販売しているのはPDF版ですが、「PDF購入者向けに書籍現物も1部お送りする」という「現物郵送権つきPDF販売」となっています。検索できるPDF、流して読むのに適した書籍、ということでTPOにあわせて活用できるかと思います。値段は投稿時点でのドル円レートに換算すると1500円より少しだけ安くなっております。そろそろショップでも見つからなくなりつつありますし、ご興味ご関心のある方は是非お試し頂ければと思います。
上記リンクをたどってご購入できますが、支払の際、メールアドレス欄に続く「(実物送付先)」と書いてある3つの欄(郵便番号、住所、氏名)を埋めていただくと実物を1週間程度でお送りします。(PDFだけでいい人は当該欄に何も入力せず進んで下さい)
以下注意事項です。
BISHAMONとはマッチロック株式会社が制作・販売している3Dエフェクトツール&ミドルウェアです。このたび個人制作方面向けとして、BISHAMON Personalがリリースされました。
下の動画はマッチロック様によりBISHAMON IDEで制作されたエフェクトの画像ですが、要するにこのようなエフェクトがIDEを利用することで簡単に作れるようになる、というものです。
で、D.N.A.Softwaresでもエフェクト制作をツールでできるようになれば楽だよねー、ということでBISHAMONのSDKを買いまして、実際に導入してみました。
こんな感じのIDEで編集して
コンバートして再生
という感じで、凝ったエフェクトでも簡単に制作できます。
で、このたびマッチロック様のご承諾を得まして、「BISHAMON Personal版SDK(DirectX9版)をご購入済みである」ことを条件に、BISHAMONを使用できるバージョンのAIMSを個別に配布させていただくことにいたしました。
現時点での仕様としては下記の通りです。
前述の通り、AIMS+BISHAMONは確認プロセスを経た上での個別配布となります。下記の点をあらかじめご了承ください。
AIMS+BISHAMONをの使用を希望される方は下記の手順でBISHAMON Personal SDKのライセンスを入手しD.N.A.Softwaresまでご請求メールをお送りください。
上記のような流れになりますので、2MBくらいの添付メールが来ても大丈夫なメールサーバからご送信頂くよう御願い申し上げます。メールでの受け取りが難しい場合はその他の手段で個別対応します。
AIMSの最新版v1.60ですが、現在subversionリポジトリの方でのみ公開しております。
といいますのも、AIMSv1.60でシーンスクリプトに大幅な仕様変更が入りまして、既存スクリプトとの互換性に問題が生じる場合があるかもしれない状態になっているためです。ちょっとサークル作業が立て込んでおり、PDF版ドキュメントの作成が間に合っていないこともあり、まだSVNでの公開のみとしております(当面の対処としてreadme.txtにて更新点など説明しております)
具体的な仕様に関わる変更点ですが、
簡単に言うとシーンクラスの各関数でwait()関数が使えるようになったということです。これまで別途コルーチンを呼んでいたような処理の多くがシーンクラスでまとめて記述できるようになることが期待されます。
互換性については万全を期しましたが特に1フレーム単位でのタイミングズレなどはあるかもしれません。特にタイミングに対してシビアなコーディングをしている場合はご注意ください。
なおアクターの方については扱いはこれまで通りです。
これはご覧の通りというほかありません。これまでのスクリプトをそのまま動かす分には一切影響しないはずです。v1.60以降はレイヤー指定の範囲は0~15となります。
SVNのアドレスは svn://u.amatukami.com/home/svn/P_AIMS となっていますので、適当なクライアントでごらんください。
AIMS ver1.50を公開しました。ダウンロードページへどうぞ。
例大祭新作(のはずだった)「SMASH TOUHOU」で使用したバージョンです。かなり特定用途向けの関数もありますが、応用範囲は広いと思います。
また、テクスチャフォント作成ツールをLuna最終版ベースに更新しました。OpenTypeな日本語フォントをコンバートする際によく遭遇する、「指定したサイズに対して実際の文字のサイズがやたら小さくなる」問題に対処できるようになっています。
それと、マップエディタなどでつかっていたClickOnce配布をとりやめました。ちょっと融通が利かないのと、実行ファイルの実体がどこにあるかわかりにくいのがどうも気に入らなかったので……。また、以前出ていた不具合はClickOnceに切り替えたら直った、と思っていたのですが、これが別にClickOnce配布でなくても問題はなかったというのもあります。コロコロ方針が変わって申し訳ありません。
残りの主な修正点はこの先に。
Read the rest of this entry »
Twitterでこんな疑問を頂戴しました。
AIMSでプレイヤーが4人いる場合、同じ処理をする関数をコピペするしかないんだろうか。それともアクターから操作することができるのか。(@nekokoko)
マルチプレイヤー時のアクタークラスの使い回しですが、アクターごとに固有のものといえば値スロット(VAR[n])があります。適当な値スロットにプレイヤー番号をセットし、それを参照するようにします。
1 2 3 4 5 6 | -- VAR[0] にプレイヤー番号が定義されているとする function Actor_OnStep() if (getJoyPressCount(VAR[0],BUTTON_TRIG1) == 1)then -- 適当な処理…… end end |
あとは、アクター生成後にsetv関数を用いてそのアクターの値スロットにプレイヤー番号をセットしてあげるようにすればできあがりです。
ですがこのやり方では、「OnStart関数内でプレイヤー番号による分岐ができない」という問題があります。現時点のAIMSではOnStart関数の起動タイミングがcreateActor関数の中である都合、値スロットをセットする前にOnStart関数が起動してしまうのです。そのため、OnStart関数内ではプレイヤー別の処理ができません。
じゃあどうすんの、というと、やや古くさいやり方ではありますが「グローバル変数経由で引数渡し」という手段を使います。こんな感じ。
1 2 3 4 5 6 7 8 9 10 11 | -- アクター生成時…… _PLAYER_ID = 0 -- この変数はlocal宣言してはいけない local a = createActor(player_graphic,320,240,1,"player"); -- アクタークラス function player_OnStart() VAR[0] = _PLAYER_ID; -- VAR[0]に保存 -- その他適当な初期化とか…… end -- あとはさっきのOnStepと同様 |
これでだいたいのパターンには対処できると思います。
あんまり泥臭いのでcreateActorの引数で値スロットの初期値決められるようにした方がいいんだろうなーとは思ってるのですが、可変引数の処理がちょっとややこしく、後回しにしているのが現状です。
AIMS ver1.42を公開しました。ダウンロードページへどうぞ。
本体の修正はもちろんですが、マップエディタの配布形式変更がある意味では重要かもしれません。
AIMS V1.41のproto/common.luaについて
という誠に残念な不具合がございましたので、取り急ぎ修正済みのcommon.luaをアップロードしました。下記よりダウンロードください。
SVNリポジトリのファイルも修正済みです。アーカイブファイルの修正は後で行います。取り急ぎ上記ファイルをご利用ください。