ウディタ3.5開発中その7 タブウィンドウ・正規表現・XY配列ピクチャ・レイヤー5(プロ版)!
ウディタ3.5開発の経過報告、その7です!
Xなどで様々なご要望をいただいており「あ、これ入れたいと思ってたやつだ!」となっては追加で実装する日々が続いております!
当面の最後の大規模実装だと思って、自分の技術で作れそうなもの、かつ私や多くの人が必要そうなものはどんどん採り入れ中です。
ということで、今回もウディタ3.5に実装される新機能をご紹介します!
●タブウィンドウ化! 行ったり来たりする作業の効率アップ!
ウディタ3.5からは「マップイベントウィンドウ」「コモンイベントウィンドウ」「データベースウィンドウ」の3つにタブが付きます!
いま開いている場所(イベント番号や行数、スクロール位置など)がタブごとに保存できるので、たまにある「あっちとこっちの処理を見比べながらデータをコピーしたり入力したりする」場面では非常に便利です!
忘れておきたくない場所にタブを開いておけば後からでも開けるので安心!
特に「データベースウィンドウ」でのマルチウィンドウ機能が欲しいというご要望をだいぶ昔からいただいていたのですが、それもこのタブ機能で、ある程度はカバーできるようになると思います(技術的な都合でよさげなマルチウィンドウが作れませんでした)。
なおこのタブ機能、ちゃんと「エディターオプション」から従来通りの「タブなし」に戻すこともできます! 以前通りの方がいい方や、タブの縦幅すらカットしたい人にはそちらもぜひ!
●【正規表現】が「文字列操作」や「条件(文字列)」に搭載!
文字列周りの処理についに『正規表現』が実装されました!
紹介映像を作りましたので見られる方は以下をどうぞ! 正規表現について知識ゼロの方でも、ほんのり使い方が分かると思います! たぶん。
https://youtu.be/mo5BdbEHOJY
ウディタ3.5では、【文字列操作】に「正規表現で()内抽出」と「正規表現で置換」、そして【条件(文字列)】の比較コマンドに「の正規表現と一致」が追加されます!
(ちなみに「条件(文字列)」には他にも「を含まない」場合と「が最後にある」場合の比較コマンドも追加されました! これらも便利!)
「正規表現」とはおおまかに言うと「あいまい検索」みたいなことができる機能!
たとえば「人数400人」が入った文字列S1に対して、「人数(\d{1,4})人」という「正規表現で()内を抽出」処理を行うと、S1には「400」という数値のみが返されるのです!
「\d{1,4}」は「1~4桁の半角数字」で、それを()で囲んでいるので、その数値部分だけ抽出して返してくれるわけですね!
もし1つの文字列に2つ以上当てはまる部分があったら、2行の文字列として返してくれるようになっています。
また、「条件(文字列」の「の正規表現と一致」も同様で、正規表現で「人数\d{1,4}人」(\d{1,4}=1~4桁の半角数字)と指定しておくと、文字列側が「人数1人」でも「人数1234人」でも「条件を成立」させられるのです!!
一方で、文字列が「人が1人」だった場合は、いくら似てても「成立しません」。
このあいまいさは「\d」に始まる「メタ文字」というもので色々な表現を書くことができます。
たとえばさっきの延長で、「\d{1-3}-\d{1-4}-\d{1-4}」の正規表現に該当する文字列が含まれてたら「電話番号っぽい数字が入力されたぞ!」みたいに認識できたりするわけです!
これを駆使すれば、「掲示板への書き込みで電話番号っぽいのが書かれていたらその投稿を弾く」みたいな処理だって作れるわけですね! 正規表現のおかげで、「000-0000-0000」から「999-9999-9999」まで全パターンの禁止ワードを入れたりする必要はなくなるのです!
この「正規表現」はプログラミングにおいてよく使われるもので、文字列の取り回しやすさの限界値が大幅にアップします!
といってもかなりのガチ勢向けで、私も普段よく使うもの以外は見ずに書けないので割と達人向けです!
テキストスクリプトなどを作成される方にはとても便利だと思いますので、よければぜひご利用ください。
これから正規表現を学びたい人には、よそ様のページですが正規表現サンプル集などが参考になると思います。他にも「正規表現 サンプル」などで検索すれば勉強になるページが色々出ますよ!
【正規表現サンプル集】 https://www.megasoft.co.jp/mifes/seiki/ (メガソフト様より)
●マップのレイヤーが5まで使用可能に!(プロ版専用)
これまで3レイヤーまでしか使えなかったマップのレイヤーが、ウディタ3.5からはレイヤー5まで使用可能になります! ただし使用できるのは「プロ版のみ」です!
仮にプロ版で「レイヤー5」まで使ったマップを作って、そのデータを無料版Game.exeで起動すると、「レイヤー3までしか表示されなくなります」ので、その点はご注意ください。
つまりウディコンでは、審査中はマップレイヤー4~5は使えないということですね。
↑マップレイヤーの拡張は「ゲーム基本設定Pro」から設定可能です。
レイヤー4だとマップの描画負荷が1.33倍、レイヤー5だと1.67倍になりますのでそこはご注意を!
それでも、従来よりもさらに複雑なマップ表現が行えるようになります!
●「XY配列をピクチャとして表示」する機能を追加!
これは事実上、「ゲーム内で好きに画像を作れる」機能です!
アルファ値、R、G、Bのパラメータを保存した4つのXY配列(2次元配列、無限に作れる)をピクチャのファイル名指定欄に隠しコマンドで指定すると、その配列の値にしたがった画像をゲーム中に表示することができます!!
以下のコマンドをピクチャのファイル名のところに入れると出せます!
「<XY_IMAGE/A=?/R=?/G=?/B=?/XSIZE=??/YSIZE=??>」または
「<XY_IMAGE/A=?/R=?/G=?/B=?>」
「?」部分には、Aならアルファ値だけを格納したXY配列番号を、R、G、Bにも同様に各色の0~255の値を記したXY配列番号を指定します。XSIZE=??やYSIZE=??の部分には使用するサイズを記載します。
たとえば「<XY_IMAGE/A=1/R=2/G=3/B=4>」と指定すると、アルファ値としてXY配列「1」、R、G、B値としてXY配列「2,3,4」に入っている値でピクチャを表示してくれるのです!
↓右上に出てるのがXY配列ピクチャで作ったミニマップ!
↓これだけの処理でミニマップを表示しています!(マップの通行設定を1マスずつ読み取ってXY配列に書き込んでいるだけ)
つまりマップの通行設定を格納して即席で「ミニマップ」を作ったり、なんらかの「グラフ」を出したり、「複数の画像」を読み込んで1枚に重ねたりと色んな使い方ができます!
特にミニマップがゲーム内処理だけで作れるようになるのは大きいのではないでしょうか!(従来から、アイコンなどを活用して作ることはできてましたけれどね!)
なお、XY配列からピクチャ化する「表示」の瞬間の負荷は大きめになってしまっているので、そこはご了承ください。
といっても私の環境だと100×100のXY配列を画像にする瞬間で0.3msくらいの負荷だったので、「1マス1ピクセルのミニマップ」を作るくらいなら常時更新でも問題なく行けそうな気がします(1フレーム16.6msなのでその範囲に負荷をおさめる必要があります)。
HDDやSSDからのストレージからの読み込み時間が結構かかることを考えると、普通の画像読み込みとそう変わらないかもしれませんね。
●キー入力に「押し続けフレーム数」の取得も追加!
前回、「キー入力」に「新押し時のみ」「離した時のみ」の取得モードを追加しましたが、コメントを見てあと1つ足りないと思ったので「押し続けフレーム数」の取得モードも追加しました!
これで「新押し時」と合わせれば、「↑キーを押しっぱなしにしてたら一定時間ごとにリピートされる」、「ショットキーを押し続けていると一定間隔で自動連射」みたいなのが簡単に作れるようになります!
情報としてはシンプルですが色んな処理を書かずに済むようになるので、ちょっと楽になるはずです! これまで上手に処理を組めなかった人にもお役に立てるでしょう!
(なお、この「新押し時のみ」~「押し続けフレーム」の取得モードは、「キーボード・パッドボタン(スティックやPOVキー除く)・マウスクリック」のみに使えますので、その点はご了承ください)
●エディターからのテストプレイ開始が快適に!
エディターからのテストプレイ、これまでは『すでにGame.exeが立ち上がってる状態』でテストプレイを開始すると「(ゲームの)重複起動です」みたいなエラーが出るだけでなんだか面倒臭い感じになっていました!
が! 今回からはすでにテストプレイからのGame.exeが立ち上がっていれば次にテストプレイを押したとき、自動でそのゲームのウィンドウが最前面に来ます! 地味だけどとても便利!
ちなみにこの機能、どうしてこれまで簡単に作れなかったかというと、Editor.exeとGame.exeの通信機能を用意しないとダメだったからですね!
というのも、最近のWindowsはよそのEXEのウィンドウをいじったりする処理が極めて強く制限されており、Editorから立ち上げたと分かっているGame.exeのウィンドウすら、Editorから直接最前面にすることができなかったのです。
なので最前面にするだけといっても、内部的にEditorからGameに対して「最前面に出して~」と通信を行い、「Game.exe側でそれを受信したら自主的に最前面表示になる」という回りくどい手順が必要だったのです。
今後はゲーム画面を開きたかったら、とにかくF9やCtrl+Tやテストプレイボタンを押せばいいだけになるので手軽です!
もう毎回数秒かけてマウスカーソルでタスクバーからゲームのウィンドウを開きなおす必要もなくなるので、効率がほんのちょっとアップするはずです!
という感じで、ウディタ3.5での快適性アップや、やれることの幅の拡張が進んでおります!
残る新機能予定は『BGSの多チャンネル化』など! BGSは割と全体に処理が食い込んでるのですごい修正量となってしまいますが、ウディタの長年の弱点だったのでこの機会に補強したいと考えています!
根本からの修正は今みたいな大規模修正のチャンスじゃないとなかなか着手できない部分なので、これを逃したら普通に次のチャンスは 3年後 などになってしまうと思います。せっかくなので、この機会に強化しちゃいましょう!
もちろんここまで作った機能にも大量のバグが出ておりまして「ギョワアア!」って叫びながら直しております!
そして引き続き、チップやBOOTHなどからご支援くださっている方、本当にありがとうございます! リソース的にはもう限界をややオーバーしちゃってましたが、おかげさまでもう一踏ん張りがんばれております! 本当に助かります!
ウディタ3.5のリリースは運がよければ今年中、やっぱりダメそうなら来年始め頃になると思いますが、気長にお待ちいただけますと幸いです。当面の最終大規模更新と思って全力を尽くします!
そしてまた、12月24日にはうちのサイト、シルバーセカンドが26周年! もし生放送ができそうなら今年を振り返る生放送をやろうと思いますので、そちらもうっすらお楽しみに!(体調の都合でナシになる可能性は常にあります)
ということで年末に向けてのラストスパート、引き続きがんばります! うおお!!