ウディタ3.5開発中その4 ピクチャリンク・DBソート・特殊文字右クリック入力・変数操作+
ということでたぶんその4くらいになったウディタ3.5開発の経過報告です!
引き続き「これまで欲しかったけど入れられなかった新機能」をいろいろ追加中!
今回もご紹介していきます!
●キャラへのピクチャリンク機能
今回の目玉! マップイベントやプレイヤーなどのキャラクターに『ピクチャをリンク』させることが可能になります!
ピクチャをキャラにピクチャリンクさせるとどうなるかというと、『ピクチャをキャラクターに永久に追従させられる』ようになるのです!
これは「マップイベント」を使う自作システムを作り込む人にはうれしい機能!
もう並列イベントでゲージのピクチャをキャラ位置に動かし続けなくてもいい時代になります!
より厳密には、ピクチャリンクすると「キャラの(マップズームも加味した)画面上のX・Y座標をリンクしたピクチャに『加算』し、マップズームに応じた『拡大率変化』をかける」という処理が行われます。一言でいうと、キャラクターにピクチャがくっついたような動きをするわけです。
紹介映像も作ってみましたので、よければぜひご覧ください!
https://youtu.be/jFwaOTwFMcs
で、ピクチャリンク機能は「エフェクト」コマンドの「キャラ」欄から使用可能でして、設定可能な内容は以下の通りとなっています。「マップズーム(の拡大率)への連動」は外すことも可能です。
・ピクチャID
キャラにリンクしたいピクチャ番号を設定します。
・リンクさせるレイヤー
- キャラの表に:キャラのすぐ表側にピクチャが表示されます(キャラ本体と同じく、リンクさせたピクチャが他キャラや▲チップで隠れます)。
- キャラの裏に:キャラのすぐ裏側にピクチャが表示されます。
- 影レイヤーに:「全てのキャラの足下」のレイヤー、かつ「地面のY座標(キャラの「高さ」を変更しても変化しません)」にピクチャが表示されます。(ピクチャレイヤーのマップの上、キャラの下とほぼ同じ)
- ピクチャのまま:ピクチャのレイヤーのまま、キャラの座標や拡大率のみ反映し続けます。
・連動させるパラメータ
- XY拡大連動:(マップズームを考慮した)画面X・Y座標をピクチャに「加算」し、マップズームによる拡大率の変化をピクチャにも反映させます。
- XYのみ連動:(マップズームを考慮した)画面X・Y座標をピクチャに「加算」します。マップズームの拡大率はピクチャに反映されません。
【どんなことに使える?】
ピクチャリンク機能の用途ですぐ思いつくのは、頭の上に状態異常マークや感情マークを出したまま歩かせたり、HPゲージを出したりすること!
「キャラにピクチャをリンク」と1行指定するだけで、ゲージのピクチャがずっとそのキャラについていってくれます!
なおゲージを頭に出したいときは、ピクチャの座標は「中央下」基準で(0,-30)[※上に30ピクセルだけずらす]のように指定します。これにキャラの足下中央の座標が足されるので、自然に頭の上に表示されるのです。
他にも、ただ「キャラの名前」を頭の上に出しておきたいだけでも、従来ほどの苦労は不要になります! ピクチャを0,0座標とか0,-30座標あたりに出して、ピクチャリンクのコマンド1発おこなうだけで実現可能!
【これまでアクセスできなかったキャラ間の描画優先度にも挟み込める!】
さらにはこれまで不可能だった、『ピクチャの表示優先度をそのキャラと同じ』にすることも、このピクチャリンクを使えば可能になります!
これまでピクチャは、「キャラレイヤー全体や、マップ下地レイヤー全体の上か下」にあったので「自分の前にいるキャラで隠れるピクチャ」というのは作れなかったのですが、今回からはそれも可能!
ピクチャでオーラを出したキャラが「木の裏」に行けば、オーラの一部も「木の裏」に隠れるようにできるのです!(従来のピクチャだと、「キャラだけは木に隠れてるけどオーラだけどうやっても木の前側にでちゃう」という感じになってしまっていました)
他にも、透明キャラにピクチャをリンクさせれば、「キャラの前後関係やイベント判定処理はそのまま使いつつ、キャラ描画だけを全部ピクチャで行う」こともできるようになります。
補正したピクチャをキャラに重ねて、HD-2Dっぽいエフェクトをかけたりするのもたぶんだいぶ簡単に!
「影レイヤー」へのリンクも用意してあるので、影をピクチャで描画するようにだってだいぶ簡単にできるでしょう(これ自体は工夫すれば前もできたんですけれども)。
さらには「メッセージを頭の上に表示させたまま歩かせる」なんてことも非常に簡単に作れるようになります! これまでのように、並列イベントでずっとピクチャ座標をキャラに追随させる必要がなくなるので、かなりすっきりと処理を作れるはずです。
私の開発中の『片道勇者2』でも多くのキャラの上下にゲージなどの情報を出すことをしているので、これが使えたらもっと簡単に実装が進んでいたと思いますが後の祭りです。
●可変DBのソート(並び変え)機能
ついに来ました、可変DBを特定の項目の値にしたがってソートする機能!
ゲーム中のデータの並び変え処理を作らなければならなくなった人なら誰でも欲しかったはず!
これは特定の「項目」の値の大小にしたがって可変DBの「データ」を並び変える機能です。
「昇順(小→大)か降順(大→小)」か、「どのデータ範囲を並び変えるか」「並び変えにはどの『項目』の値を見るか」を指定してソートできます。文字列ソートもいちおう可能ですが、C++のstring型の文字の大小関係をそのまま使ってるだけなので、詳しい話は言えません。たぶんUTF-8のコード順になると思います。
それでこのソート機能、それこそ「すばやさ順」で1ターン中の戦闘の行動順を計算する、といったことに始まり、「アイテムの性能別ソート」や、あるいは項目に「乱数」を入れてから並び変えることで「シャッフル」させることだって可能!
いちいちこういうソート処理を苦労して作らなくてもよくなるので、これからはその労力を他に回せます!
どこまでできるかの紹介は下の動画で説明しておりますので、よければぜひご覧ください(でも動画内で素早さを「小さい順」にソートしてるのはちょっと変ですね! 素早さで行動順を算出するなら「大きい方」から並べないと!)
https://youtu.be/SIC74r5De8o
●Editorで右クリックから特殊文字入力
ウディタには、数値欄に1600000(コモンセルフ0)のように100万以上の変数呼び出し値を入れることで、数値そのものでなく「変数の値」を指定できる機能があります。
主な入力箇所では変数用のプルダウンメニューが使えるので別に使わなくてもいいんですが、けっこうなところでこの入力方式を要求する場所がありました。
そこで! Ver3.5からは上の画像のように、数値欄の右クリックメニューに各種特殊文字を入力できる機能が搭載されます!
「数値欄」には変数呼び出し値を右クリックメニューから見本入力できるほか、「文字列欄」には¥v[?]や¥f[?]のような「特殊文字」も指定可能!
今後はいちいちマニュアルなどを見なくてもよくなります!
●総合的なパフォーマンス向上
ウディタ3.5では細かなところでパフォーマンスが向上します!
●【起動時間/調整】Editorの起動時間が短縮されました。
→ 【参考】 サンプルゲーム入りEditorの起動時間が作者環境で 約19秒→約11秒(約40%カット) に短縮されました。
→ 代わりに各イベントコマンド入力欄の「初回表示」時のみ0.数秒~1秒程度の待ち時間がかかるようになります。2回目以降の切り替えは高速です。
(最初に全てロードせず、初めてクリックされたときにコマンド入力欄をロードするようにしたためです)
●【文字列操作/調整】「上1行切り出し」の処理速度が向上しました。
→ 16KBで320行のファイルを30回、1行切り出しで最後まで読み込ませたテストでは処理時間が620ms→約360msになりました。
処理速度にして約70%アップ!
→ テキストスクリプト機能を自作しておられる方が一番使う機能だと思いますのでそこそこ貢献できると思います。私もかなり使ってます。
●【コモンイベント・データベース/調整】
コモンイベントやデータベースファイルに圧縮をかけるよう修正
→ サンプルゲームのファイルが以下のように削減されます!
CommonEvent.dat 1232KB => 352KB (約71%削減!)
DataBase.dat 88KB => 18KB (約80%削減!)
CDataBase.dat 81KB => 7KB (約91%削減!)
SDataBase.dat 2,787バイト => 693バイト (約75%削減!)
といった具合に、可能な範囲で細かなところの性能アップも行っております!
あと、計測できなかったので載せていませんが、イベントコマンド切り替え時のレスポンスも全体的に上がってると思います。
●「変数操作+」の大幅強化
3.5では「変数操作+」で新たな情報が取得可能になります!
●【キャラ】コマンドに追加
- 画面X座標[マップズーム反映]
- 画面Y座標[マップズーム反映]
→ 通常の画面X・Y座標と違い、「マップズームの拡大率」の影響を加味した現在の画面上の座標を返します。
- すりぬけ属性[1=YES 0=NO]
●【位置】コマンドに追加
- キャラ通行可能方向[1上+2左+4右+8下]
- タイルのカウンター属性[1=YES 0=NO]
●【位置】コマンドに【画面座標】オプション追加 (「画面座標」は新規追加)
「画面座標(ピクセル単位)」を指定し、その位置の情報を得ることができます。
- px座標のイベントID[マップズーム加味]
→ 指定座標下にイベントがあるか判定できます。
座標として「マウス座標(Sys71~72:マウスXY座標)」を指定すればマウス下のイベントを返せます。マップズームも考慮します。
- px座標のイベントID+範囲拡張[マップズーム加味]
→ 接触範囲拡張部分も含めたイベントIDを取得できます。
- px座標のマップX[マップズーム加味]
- px座標のマップY[マップズーム加味]
- px座標の精密マップX[マップズーム加味]
- px座標の精密マップY[マップズーム加味]
- px座標の最上ピクチャID[Z加味/なし:-20億]
- px座標の最上ピクチャID[Z無視/なし:-20億]
- ピクセルのR値
- ピクセルのG値
- ピクセルのB値
→ ピクセルのRGB値は、指定画面座標の1ピクセルのRGB値を0~255で返します。
●【ピクチャ】コマンドに追加
- ピクチャの横分割数
- ピクチャの縦分割数
- カラーR・G・B値
- 表示形式[0:通常 1:加算 2:減算 3:乗算]
- スクロールとリンク[ON=1]
- 設定された処理時間フレーム
- 現在の残り処理時間フレーム
- 最小の発動ディレイ(1以上のみ,なければ-1)
- 最大の発動ディレイ(なければ-1)
- IDより前にあるピクチャ番号[なし:同値]
- IDの次にあるピクチャ番号[なし:同値]
●【その他】コマンドに追加
- 今フレームに決定/接触起動したマップEvID(なし:-1)
→ これを使えば新たに生成した空イベントの起動も検知できます。ただし起動した瞬間の1フレームしかイベント値を返さないので注意してください。
- マウスが画面内にあるか?(YES=1)
- マウス座標の範囲拡張EvID(小さいID優先,なければ-1)
→ 「接触範囲拡張」も考慮した範囲で、マウス座標下のイベントIDを得られます。
といった具合!
新しい内容としては「指定IDから前後に実際にあるピクチャ番号」が分かるようになったことや、「指定ピクセル位置のRGB値が取得できる」ことでしょうか。「画面上の指定ピクセルのRGB値を得られれば、それを大きな四角に広げてモザイク処理が作れるね」とおっしゃっている方もいらっしゃいました。
あと他にも、「画面上のXYピクセル位置上の情報」を取れるようになったのも便利ポイント!
たとえば「マップズームを加味した、指定ピクセル座標のマップXYマスの値」が一発で取れるようになったので、『マップズームが自由なゲーム』でのタイルやオブジェクト、範囲座標をカーソル選択する場合も、作るのがけっこう楽になると思います。
他にも、「マップズームを加味したキャラの画面X・Y座標」や「イベントの接触範囲拡張を考慮したマウス下判定」を取得しやすくなったのは朗報だと思います!
特に、「キャラをマウスで拾って移動させたりする」といった処理をする場合でも「接触範囲拡張」を広げてキャラのクリック範囲を広げてあげたりしやすくなるので、よければぜひご利用ください。
これらはがんばれば計算できないこともなかったのですが、私もいちいちその補正を反映する処理を作るのが面倒臭かったですからね!
●文字列操作の裏技に「画像の1点の不透明度+RGB値を得る」機能が追加!
文字列操作の「隠しコード実行」コマンドとして、画像のX、Y座標の不透明度、RGB値を得る <<GET_IMAGE_ARGB_X=?/Y=?>>(ファイル名)コマンドが搭載されます!
これは (ファイル名)で指定した画像の、X=?、Y=?座標のピクセルの不透明度、RGB値を「不透明度(改行)R値(改行)G値(改行)B値」という文字列で得られるという機能!
不透明度やRGB値はそれぞれ0~255の値を取ります。
「不透明度が取得できる」という点が特に重要です!
というのもこの機能で不透明度を得られれば何に使えるかというと、
「クリック位置の『不透明度』をチェックして、画像中の立ち絵がある部分をクリックした場合だけ反応させる(透明な場所をクリックしたときは何も反応しないようにする)」
といった処理をしたい状況や、あるいは一枚絵マップを作る際、
「32ピクセルごとに画像をチェックしておき、もし不透明なピクセルがあったらそのマスは侵入不能にする」
といった自動判定をするのに使えます!
他、自由な形状の「当たり判定」をあらかじめ自動認識しておくのにも使えるかもしれません。
ただしこの機能は「画像ファイルの左上を(0,0)とした座標を指定して情報を得る」機能なので、たとえばマウス位置の画像部分が透明か知りたい場合は「マウス座標が画像のどの位置にあたるか」を計算し直す必要があります。その点はご注意ください。
それでも画像の「不透明度」情報を得られるようになると、判定の面で色々やれることが広がります! 手作業で画像の当たり判定を作っておくという超面倒臭い作業の必要もなくなるので、もしそういうので苦労されていた方はよければぜひご利用ください。
といった具合に、今回も自作システム内の『作り方』からして変わってしまうような新機能がいっぱい!
まだ次回予定分もたくさんありますので、引き続きウディタ3.5の情報をお楽しみに!