REGEX ECMA + Objects Control Beta 05C rev1 : Overview 1


REGEX ECMA は CF25 上で正規表現を扱う拡張機能として作成されました。この拡張機能には正規表現以外にも必要に応じて補助機能を実装してあります。Objects Control も補助機能の一部として極簡単な仕様で開発がスタートしました。


現在、正規表現を利用する拡張機能としてはほぼ完成し、簡易的な補助機能だった Objects Control を大幅に仕様など拡大しながらベータ版として提供、Objects Control の機能概要を現状にて説明するため本ドキュメントを作りました。この文章は 05C rev1 までに実装された機能を基に仕様を説明しています。ここで公開された仕様は将来的なバージョンアップで変更される可能性があります。

ライセンス(利用許諾)について

05B rev7 からソフトウェアが 2条項 BSD License で宣言されています。商用利用可能、著作権表示とライセンス条項を記載する必要があります。BSD-2-Clause は基本的に MIT ライセンスとほぼ同じく縛りが非常に少ないライセンスです。英語で書いておかないと無効になるため添付ファイルは英語のみ。日本語訳はこちら

作者は過去公開したエクステンションは全てライセンスを宣言したことがありません。利用に関してあらゆる面で個人裁量に委ねたのですが CF25 で作成された実行ファイルがウィルス誤検知されたりすることもあり、正規表現と filesystem は作者自身が免責を得るためライセンス宣言しました。エクステンション配布 zip ファイル内に LICENSE.txt が添付されていますので、REGEX ECMA LICENSE.txt などファイル名変えてもいいから REGEX ECMA 利用に対してライセンスを添付することがほぼ唯一の配布条件になります。

Objects Control Beta とは

CF25 上のオブジェクトは複数種類があります。REGEX ECMA における「オブジェクトコントロール」とはアクティブオブジェクト ( Active Object )=スプライトをエクステンションで操作する拡張機能です。

REGEX ECMA + Objects Control : Beta 05B rev6 : CodeName Tsunoda Version

Active Object

DX9 対応 Shaders を利用しています

変数の自動代入機能

アニメーション方向の切り替えに対応

動作中の方向切り替えも自動で設定

Object Control : 4 つの基本機能

  • Align : オブジェクトをゲーム動作中に整列する ( Action Loop 互換)
  • + A – MOTiONS : Align と連携するモーションズ ( Action Loop 互換)
  • ByName Controller : オブジェクトを名前で管理・操作する動作コントローラ ( Action Loop 非互換のループ処理がメイン)
  • + B – MOTiONS : ByName 専用モーションズ ( Action Loop 非互換ループが含まれる)
名称 Action Loop 互換 機能
Align 有り 整列
+A-MOTiONS 有り 簡易な動作
ByName Controller 無し|有り 動作コントローラ
+B-MOTiONS 有り 高度な動作

Object Control : 4つの基本機能

Align (整列) とは

Align (整列) はゲーム実行中にオブジェクトの位置を自動で揃えるプリセット集です。位置を配置するだけでなく、オブジェクトの持つ変数に連番 (Spread Value) を割り振る作業も自動で行います。複数のオブジェクトインスタンスを扱う際に連番を割り振る作業を自動化し、位置揃えに必要な計算も自動化しました。アニメーションフレームのサイズを検出して位置揃えに反映することもできます。

スロットマシン風カウンター動作サンプル (動画 GIF)

Objects Control : Align のデモ ( Grid ) 動画 GIF

上記 Grid デモを CF25 の Event List で出力したものが以下。

Event List の画面

初期位置の入力後、X グリッドのサイズとオブジェクトインスタンス間のマージンを設定すれば後はエクステンションに任せることができます。2行( 3 Actions )で上記イベントを作成できるようになりました。

Align のループ処理は CF25 の Action Loop で以下 Motions と連携できます。

+ A – MOTiONS ( Compatible Action Loop )

整列機能を使ったあとに動作を付ける機能が「 + A – MOTiONS 」です。パラメータ入力を可能な限り少なくして簡単に動作を付けるための機能としてデザインされました。デフォルト動作に無いパラメータは後から追加・変更できます。ループ処理が CF25 の Action Loop 互換なので Align と同じ行にイベントを書くことができます。

ユーザがオブジェクト動作を定義するためには多くのパラメータ入力を事前に行いますが、パラメータが多いと入力作業も大変だし途中パラメータの一部を変更する場合全部最初からやり直し。この苦痛を回避するためデフォルト値でまず動き出し、動作概要が分かったら次に個別パラメータを追加入力できるようになっています。

ByName Controller 機能と連携できますが、「 + A – MOTiONS 」はループ処理が Action Loop 互換なので ByName 系ループ処理とはループ互換性が無い場合もあります。

ByName Controller

Beta 05 以降開発が続く実験的な動作コントロール機能。オブジェクトコントローラに名前を登録してオブジェクトを操作するというフレームベースの動作コントローラです。

動作やグループに名前を付けて管理する

オブジェクトを名前で管理する (動画 GIF)

Objects Control はもともと正規表現とまったく関係ない機能としてテスト実装された作者的ガジェットです。正規表現は数学的表記法が元になっていて、コンピュータでは文字列集合を操作する機能として利用されてます。正規表現を実装し動作テストしながら思ったのは、異なるオブジェクトを集合化する機能は CF25 にも Qualifier がある、けれど Qualifier はゲーム実行中に追加したり削除したり編集機能を持たない。オブジェクトやオブジェクトの動作を集合として表現するための名前を付ければ、正規表現のように文字列(オブジェクト)の編集機能を実装できるのではないか、と考えた。

問題はそれで何が解決できるのか。それはまだ分からないけれど、オブジェクト群や動作に名前を付けて操作する機能が ByName Controller です。「群」に対して命令するためのコントローラなので「個を区別する名前」を付ければ「個」を区別することもできますが、効率的な使い方ではありません。

CF25 の Create By Name という拡張機能の動作コントローラ版※とも言えます。

※ 公式機能にある Clickteam Movement Controller のこと、ゲーム実行中に Movement パラメータ変更する際に利用されるエクステ

Clickteam Movement Controller との違い、その1「フレームベース」

ClickTeam Movement Controller : 公式はタイムベース動作とフレーム動作ベースの両方に対応している

Clickteam Movement Controller というのはクリックチーム公式のエクステンションですが Movement の定義はアクティブオブジェクトのプロパティから行います。アクティブオブジェクトに付けた「動作」に対してゲーム実行中にパラメータ送信したいときに「Clickteam Movement Controller」という「拡張機能」を使います。

現在作成中の「ByName Motion Group Controller」は「Clickteam Movement Controller」を模したり競合したりする拡張機能ではなく、「Clickteam Movement Controller」には無い機能的概念を取り入れた拡張として作られています。「ClickTeam Movement Controller」と「ByName Motion Group Controller」の違いは「タイムベース動作をサポートしているか否か」「集合を一つの群れとして扱い自動操作する」この二つが決定的に異なります。

「ClickTeam Movement Controller」はタイムベース動作とフレームベース動作の二つをサポートしています。デフォルトではタイムベースで動くためパラメータの入力もタイムベースを基にした数値がデフォルト値になっています。たとえば Angular Velocity (角速度)が 180 とか説明無しだとなんのことかと思いますが、これはタイムベースで考えると一秒間に 180 度の角速度のことだと分かります。この動作をフレームベースに置き換えると 60 FPS が一秒の場合、角速度は 1 FPS で 3 度。

「ClickTeam Movement Controller」は基本的に「時間」という概念で「速度」を求めるように作られています。フレームベースでもタイムベースでも動くようにパラメータに互換性を持たせる工夫がある。

「ByName Motion Group Controller」はフレームベースで動かすことに特化しています。タイムベースへの対応を完全に放棄した作りになっている。なぜならば「その方が作るの楽だから」。「ByName Motion Group Controller」で扱う速度という単位は「移動量 = pixel」のこと、回転するオブジェクトの角速度は「角度 = 度数法(弧度法ではない)」でパラメータ入力できます。時間単位の移動量は各ユーザで計算してねという方向性。

Clickteam Movement Controller との違い、その2「集合・整列と循環ループ」

「ByName Motion Group Controller」はオブジェクトインスタンスが複数あるという前提で動作(モーション)は循環ループを作るよう設計されています。

ClickTeam Movement Controller : インスタンス整列や動作を作るために計算が必要

「ClickTeam Movement Controller」はアクティブオブジェクトのプロパティからパラメータを入力しますが、オブジェクトインスタンスが複数ある場合にパラメータは一括入力だから全部同じ値になります。ゲーム実行中にパラメータを変更するためにはループ処理を駆使して自力の計算が必要。ゲーム実行中のオブジェクト自動整列機能もありません。

「ByName Motion Group Controller」は自動整列のテンプレートによる計算不要な「整列」がゲーム実行中に可能。そしてオブジェクトインスタンスが複数あるという前提で「循環ループ」的な動作を付けるテンプレートがあります。これももちろん計算不要です。そして「循環ループ」実行中の群れに対して「名前」を付けてコントロールする、これが「ByName Motion Group Controller」の特徴であり「ClickTeam Movement Controller」との違い。

モーションの循環ループは「スタート地点から離れても時間経過と共にまたスタート地点に必ず戻ってくる動作を繰り返すもの」と定義しています。つまり Flip とか Wrap 、Orbital (Circulation) がモーションの循環ループ実装例です。どこかに飛んでいってしまって戻ってこないような動作は循環してないので循環ループではありません。

ゲームではモーションの循環ループは単純なアルゴリズムの敵動作などに利用される機会が多いです。

Flip 動作でロボットを反転させる (動画 GIF)

たとえば Flip は簡単に作れるのですが if condition など最低限の条件判定は必要なのでこれを自作する必要があります。しかし「 if condition 使わなくても自動でやってくれよエクステでさー」を実現するために作られたのが「ByName Motion Group Controller」の原点。

+ B – MOTiONS

+B-MOTiONS は +A-MOTiONS よりも高度な設定でオブジェクトを動かすためのモーションテンプレートです。

+A-MOTiONS は入力パラメータをなるべく減らして簡単に動作を付けることができるように工夫されています。しかしパラメータが少ない分デフォルト動作をカスタムしたい時には別の手間がかかる場合があります。

+B-MOTiNS は細かいパラメータ入力が可能だが動作パラメータの意味が分からないと意図した動作を作れない可能性があります。+A-MOTiONS よりもパラメータに詳しい知識が必要になる分「高度」ですが、動作をカスタムできる自由度は +A-MOTiONS よりも優れています。

デバッグ情報

動作中オブジェクトのデバッグ情報取得は以下の手順で行います。

デバッグ情報の取得手順

登録されたグループ全体の情報を取得する機能と、指定された名前のグループ情報だけに絞って情報を取得する二つがあります。定義されたグループや動作が多くなると画面内で動き回るオブジェクトを区別するのが難しくなるので、「指定された名前のグループ情報を取得」機能にはそれ以外を半透明化する機能が実装されています。観察対象とそれ以外を視覚的区別が容易になっています。

デバッグ用の省略語について >> 後日書く

デバッグ情報の見方、解説 (画面は開発中のものです)

省略語が多い。AVE とか AG とかは自分で考えた省略語ではなく Allie を参考にした。生命科学分野の略語なのでプログラム的な略語とは違う。

モーションはメタ動作という大きなグループの中にサブ機能として Flip|Wrap が含まれます。メタ動作は 05B rev7 までに5種類が登録されています。

メタ動作 Motion-ID サブ機能 1 サブ機能 2
NULL 0
Horizontal 1 wrap Flip
Virtical 2 wrap Flip
Horizontal Sine Wave 3 wrap Flip
Virtical Sine Wave 4 wrap Flip
Orbital 5 ownXY Target

「NULL」は動作タイプを持たない空っぽの型。動作定義が無いので勝手に動かないが、あとから動作定義を与えれば動き出す。オブジェクトを増やしても NULL は負荷が少ない、移動量をゼロに指定するだけだとモーションとしての定義は機能を残しているので NULL よりも負荷は高くなる。名前だけコントローラに登録して負荷が少ない状態で維持したい時に「NULL」を指定すると良い。

Alpha-Blending Coefficient Param (半透明化)

動作だけでなく描画にも基本的操作を行うことができます。

Alpha-Blending Coefficient (動画 GIF)

名前指定されたオブジェクトを選択し半透明化する機能。動作コントローラの共通仕様として、名前を指定しなかった場合、動作コントローラに登録された全オブジェクト対象の命令に変わり、一括操作となります。

半透明の動作デモ (動画 GIF)

半透明化はシェーダを利用しているため動作要件が DX9 および DX9 対応シェーダ必須となっています。DX8・スタンダード描画は非対応です。

Shader は DX9 対応だったら何でも

Alpha-Blending Coefficient Param へのアクセス

名前指定された管理オブジェクトを対象に、入力されたパラメータに応じてオブジェクトを半透明化する。パラメータは 0 〜 255 で 0 の場合は透明化しない = 表示|可視化。255 の場合、完全透明化される、結果オブジェクトは非可視化。

Virtual Wall (範囲指定)

+ A-Motions に実装された Flip や Wrap はデフォルトで実行中アプリケーションのウィンドウサイズを計測し動作が切り替わるようになっています。

動作範囲を後から変更する機能が Virtual Wall という機能、動作に対する範囲指定効果があります。仮想的な壁を作ってその壁を使って反復動作するイメージです。

Flip に対する Virtual Wall の設定

+ A-Motions はデフォルト動作なので自由度はありませんが、後からパラメータを変更することで動作定義を変えることができます。

Virtual Wall の動作デモ (動画 GIF)

Virtual Wall : Auto Setup Menu Screenshot

Virtual Wall : AUTO SETUP

オブジェクトインスタンスが複数ある場合、それらを REGEX ECMA の動作コントローラにオブジェクト登録する際に必ず Action Loop が発生します。

アクションループ中に Virtual Wall 設定も済ませたい場合 Virtual Wall : AUTO SETUP を利用してください。

駄目な例、Action Loop と同じ行で Virtual Wall 設定を実行している

正しい ①:Action Loop に互換性が無い場合、行を分けてください。

Auto Setup は互換性があるので同じ行にイベントを書けます。Action Loop に対応した「Virtual Wall : AUTO SETUP」は4種類のメタ動作( Horizontal と Virtical と Sinewave )合計8種類の Motions に対して同一インターフェースで値送信できます。

正しい② : Auto Setup を使う

Virtual Wall : Auto Setup は互換ループ処理なので Action Loop と連携でき送信された二つの値を 8 種類の Motions 向けに自動振り分けします。

ユーザは利用されているモーションタイプを気にせず値を送信でき、送信された値の内容はエクステが解析して Top , Left , Right , Bottom に自動振り分けするため、例えば右左の値を間違えて送信したとかユーザの誤操作・誤送信をフォローする機能も内包されています。

Orbital モーション

05B rev7 で円動作「 Orbital 」が実装されました。Orbital は circulation movement つまり「円運動」ですがわざわざ「 Orbital 」と名付けたのは力学系ではなく宇宙空間を周回する「衛星」をイメージして機能実装していたからです。

周回の中心となるターゲットを入力し半径・角速度を入力するというプロトコルで、ベクトル計算を使っていないけれど中心座標の入力不要なのが特徴。ターゲットが動いた場合でも追従するので動作と別の動作を合体させることができます。

Access to the menu : + A – Motions : Orbital

Rotate Monster

3つの円動作を組み合わせた例

REGEX ECMA + Object Control Beta.05C rev1

Clickteam の Movement から Regular Polygon をセンターのオブジェクトに適用した例 (動画GIF)

動作を作るためのイベントラインはどうなるかというと、以下

2 Actions を実際には 1 Event Line に収めることができます

計算不要そして 2 アクションで実現可能。

Orbital の初期配置と動作仕様

メタ動作「Orbital」は円運動の中心座標を自己の XY とするかターゲットの XY とするか、サブ機能2種類が実装されています。どちらも共通した仕様として「 Clockwise 」があります。円運動する具体的なイメージとして作者は「時計」を意識しながら作っていたので Orbital の実動作も「時計」を模しています。初期配置は時計の 0 時、進行方向は AVE※ にプラス値を与えると時計回り(右回り)など。

※ Angular Velocity = 角速度の略語 = AVE

AVE ±で回転方向を決定

動作デモ (動画 GIF)

一番左は動作を停止してあるのではなく AVE (角速度)の値を 0 にしてあるため停止しているように見えます。+A-MOTiONS は円運動の開始位置をデフォルト値から変更できませんが +B-MOTiONS は初期パラメータ入力で動作開始角度の設定が可能。

開始角度の設定

開始角度を設定 ( +B-MOTiONS )

+B-MOTiONS の Orbital はパラメータ設定から開始角度位置の指定が可能です。開始角度には 0 〜 360 度範囲の値を入力してください。マイナス値への対応もあります。

インスタンス変数への自動代入機能で利用される Reserved Variables を利用するとオブジェクトインスタンス現在の角位置情報を得られます。

インスタンス変数への自動代入機能で利用される予約について

開始角度とインスタンス変数から得られる角度情報の詳細

角度情報は -180 〜 0 〜 +179 の範囲で収まるように予め加工されたデータになります。

中心からのマージン位置

中心からのマージン位置を設定 ( +B-MOTiONS )

Change Target at

Target を変更 ( Orbital )

Reversal Movement

移動量の反転

Insert Frame Time for Sleep

Sleep の挿入

Start Angular Rotation ( for Orbial )

※ 05C rev2 から実装

Orbital 専用、指定された角度で動くタイムインターバルを含んだセットアップ・モーション。

常に角度が一定を保つ規則的な動作、指定された角度に到達するとインターバルとして指定されたフレームタイム間一時停止する、この二つを組み合わせた動作が Angular Rotation です。一時停止中は各インタンス変数にタイムリミットまでのカウントを送信しているので変数値を利用したイベント自作が容易。繰り返し動作は回数指定か無限ループ指定が可能。インターバルタイムを経過後自動的に動き出したり停止したりも自在です。既存の Sleep や Reverse Movement との組み合わせでゲーム実行中でも更に細かく動作を定義したりカスタムが可能に。


Leave a comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

One thought on “REGEX ECMA + Objects Control Beta 05C rev1 : Overview