シルバーセカンド開発日誌
 ここはゲーム開発者SmokingWOLF(スモーキングウルフ)の開発日誌です。
 【現在の目標】→ ウディタ3.5のバグを落ち着かせる! & 『片道勇者2』の開発!
 ※以前のブログが使えなくなったので、ただいまこの開発日誌に移転中です。
2024年11月

2024-11-30 (土)   ウディタ3.5開発中その6 キー入力・XY配列・Git間接対応
 ということでウディタ3.5開発の経過報告、その6です!
 今回で最終回かと思いましたが、データのテキスト入出力機能を実装してたら想定以上に時間がかかっちゃったのでまだまだ続きそうです。


●念願の「XY配列」(二次元配列)機能を搭載!

 一部の人には念願だった二次元配列機能が搭載されます! その名も『XY配列』!
 数値データのみが入る、最大『10000×10000』の二次元配列を無限に作ることができる機能で、1つずつの読み書きだけでなくCSVからの入出力やソートなども可能です!



 使い勝手としては、「数値だけを入れられるDB(ただし項目数は100から10000まで拡張可)が無限に作れる」みたいな感触となっております。
 
 XY配列の入力画面は以下の通り! ……といっても、この「XY配列」機能はインターフェースとしては従来のDBと並んでいる扱いなので、そのまんま「DB操作」画面です。


【特徴】

●「配列番号/名前」には好きな「番号」または「文字列(名前)」を指定できます。
 「X列」と「Y列」には「数値(変数)」だけ指定可能です。

 → この「配列」は、あらかじめ用意する必要はありません。なかった場合、数値を格納した時点で勝手に作られます。

●「X列」と「Y列」は、使った番号まで自動で配列が拡張されます。
 サイズの限界は最大でX、Y共に「10000」までです。

●「新データ挿入・抜き取り・コピー・ソート・CSV入出力」機能も使用可能です。

●XY配列の内容はもちろんセーブデータにも保存されます。



【どういう場面で使える?】

●自作システムを作ってる最中に出てくる、「DBを作るほどでもないけど大量の数値を扱いたい!」という場面で非常に有用です!
 たとえば「素早さが高い順に行動順の並び変えをしたい!」みたいな処理をするときも、今後はいちいち可変DBに計算用のDBを作る必要はなく、XY配列だけで完結できてしまいます!

●単純に自作システム内で、コモンセルフの足りない分を補うのにも有用です!
(使えるのは「数値」だけですのでそこはご注意を)

●コモンイベント配布においても、処理がほぼ数値データだけで済む場合は、わざわざ可変DBの新たなタイプを作らなくてもXY配列だけで用が済むようになります! コモン導入がシンプルに!
 → その場合、使用されるXY配列の名前は「(作者名)_(コモン名)_1」みたいにしておいてくださると他のコモン作者さまとバッティングしなくなるので安心ですね。

●他には『マップに関わるなんらかの処理で使う』というのがすぐ思いつきます!
 「マップと同じサイズのXY配列」を作って、何かの値を格納したり読んだりする、ということが従来よりも圧倒的に簡単にできるでしょう。

●「名前で一部の変数を管理したい」という需要にも応えられます!
 たとえば1x1の配列を使用し、配列名に「[物語用]ウルフがトイレに行ったフラグ」などと入れれば名前でのフラグ管理も可能になります。

●今後、2次元配列を入出力とする「何か」を私が作る場合でも気軽に色々できます!
 今回の更新では、【4つのXY配列「アルファ値・赤・緑・青」を指定すれば、その配列のアルファ、RGB値で画像を出力できる隠しコード】みたいな機能も検討中です。ウディタをちょっとしたペイントツールにすることもできますよ!


 といった感じで、地味ですが利便性が上がり、夢も広がります!
 



●データのテキスト入出力機能!

 データのテキスト入出力機能! これは入れるか迷ったのですが、今回入れなかったらたぶんあと3年くらい搭載されなくなりそうだったので10日くらいかけて思い切って実装していました。10日で実装できたのなら割のいい投資です。

 これは、ゲーム設定、各データベース、コモンイベント、タイル設定、マップファイルを「TXTファイル」でも出力、ないし読み込み可能にする機能です。
 これができると何が嬉しいって、Gitで差分管理やバージョン管理がしやすくなるんですよ!
 というのも、これまではウディタの各種ファイルは、.datや.mpsのような、人間が読めない「バイナリファイル」で保存されていたため、Gitで差分を取ったりするのが難しかったのです。ですがこれが「テキストファイル」なら、しっかり管理してくれます。

↓マップファイルのテキスト版、最初の方にマップチップ情報、(見えない)後ろにイベントデータが書き込まれています



【Gitを使うと何ができる?】
●定期的にコミットすることで、コミット単位で書き換えた場所だけを後から確認できる
 致命的なバグが起きてしまったけれど原因が分からないとき、「いじった部分」だけを追跡すればどこが悪かったのかを見つけ出しやすくなります。

●前にコミットした時点の内容に巻き戻せる! バグが起きて困ったときに、データを巻き戻したりできます。

●他の人のテキストファイルと、修正部分を「マージ(合体)」させることができる。うまく作業の仕組み作りができれば、遠隔での共同作業もいくらか可能になるかも!

→ といったGit利用におけるこれらの強みを、ウディタでも一手間かかるものの享受できるようになります!
 ただ最初はGitの扱いがだいぶ難しいと思いますので、あくまでできる人向けです(私は分からないなりに色々操作した結果、過去のバックアップデータを全部吹っ飛ばしたことがあります)



【TXT入出力にはどんなモードがある?】
 このデータのTXT入出力機能には以下のモードがあります!

●「エディターオプション」から、ファイルのセーブ時に自動でTXTファイルも保存されるよう切り替えできる。
→ 一番シンプルなモード。ゲーム設定やコモン、DB、マップなどを保存した際に自動でTXTも出力されます。ただ環境によっては少し保存処理が重くなるかもしれません。

●「エディターオプション」から、指定したフォルダに「TXTファイルをまとめて出力」、ないし「TXTファイルからまとめて読込」できる。
→ Gitのバージョン管理では全ファイルをまとめて戻すことが多いので、エディター内からも「まとめてTXT読込」でデータを復元できる機能を用意しておきました。その逆の「まとめてTXT出力」機能はたまに出力したい人向け。

●コマンドラインでまとめて出力・読み込みできる。
 Editor.exe -txtoutput -target ALL -txt_folder Data_AutoTXT
 みたいにコマンドプロンプトで入れると、「ALL」対象である「基本データ(ゲーム設定・DB・コモン・タイル設定・マップ)」と「全マップ」が「Data_AutoTXT」フォルダ以下にフォルダ構造を再現してTXT出力されたりします。逆に、そこから読み込んで各ファイルを復元する「-txtinput」モードもあります。
→ batファイルなどを使える人なら、「Gitにコミットする直前だけまとめてTXT出力する」みたいな工夫もできるはずです。
→ 「-target」オプションは 「ALL(全部)」の他に「BASIC(基本データのみ)」と「MAP(全マップ)」があります。




●キー入力強化! 「新押し」と「離した時」の取得が可能に!



 もう上の画像を見てくださるだけでピンと来る方も多いかもしれません!
 3.5ではいつも通りの「押されている状態」を得るだけでなく、「新たに押された瞬間」「離した瞬間」の1フレームだけ値を返す、という取得方法が追加されます!
 
 いちおう自作コモンイベントでもこの処理自体は作れるのですが、従来は毎フレーム「そのキーが押されているか」を記録し続けなければ「このフレーム中に新たに押されたか」「離されたか」を知ることは難しく、意外に手間な部分でした。なんならうまくまだ作れない人もいらっしゃるでしょう。
 そこがワンコマンドで作れるようになったので、以後はだいぶ気楽に使うことができます!


【「新押し」機能はタイピングゲームに強そう!】
 従来の「押されている状態」を使い、「キーボード全キー(を取得)」と合わせてタイピングゲームを作っておられた方もいらっしゃるかもしれませんが、実はこれだと同時押しされている際、「同時押しされている中で最も小さいキーコードの値だけが返される」という問題がありました。つまりAキー(130)から指が離れてない状態でSキー(131)を押しても、判定上は「A(130)」のキー値しか返されないという状況になってしまうのです。

 ですが! 3.5からは「新押し時のみ取得」で「全キー」を取得するようにすれば、最初に押されたキーは1フレームで返し終わってしまい、別キーが受理可能になるので、「新押し時のみ取得」を使えば前のキーを押したまま別のキーを押してもちゃんと新しい方のキーが返される」ようになるのです! これはタイピングゲームがすごい作りやすくなりますよ!
(といっても、0.016秒内に2キーを同時押しされるとやっぱり小さいキーコード1つしか認識されないという問題はあるので、そこまで気にされる方は従来通り1キーずつ全チェックされるしかないんですけれども)

 「1フレーム差あれば全キー受理される」くらいの精度のゲームであれば作るのが相当楽になるはずですので、タイピングゲーム作りに挑戦される方もこの機会にぜひご利用ください!


 もちろんアクションゲームやRPGでもキー反応をより正確にすることができるはずですので、どんなゲームにおいても、ぜひこの「新押し時のみ」「離され時のみ」判定は役立つと思います! 私もいっぱい使う場面がありそうです。



 といった感じで、今回も「作り方」から変わってしまうような重要な新機能がいろいろ実装できました!
 
 この調子だと公開時期がほぼクリスマスになったりするかもしれませんが、どうか気長にお待ちください! まだ故人の都合で、リアルの用事もいろいろ発生してしまっているものでして。


 また、BOOTHなどでご支援くださっている方、本当にありがとうございます!
 いよいよウディタプロ版の売上げも停滞しつつあり、ウディタプロ版や関連するBOOTH売上に対する作業時給がこの3ヶ月間ずっと200円前後になっているので、もうこれが最後の大規模更新のチャンスだと思って色んなものを体中から出しながらも色々追加しておりました!
 が、みなさんのご支援のおかげでもう一踏ん張りがんばれております! 本当に助かります!

 引き続きラストスパート、がんばっていきます!
 2024-11-30 (土) web拍手 by FC2 カテゴリ: ウディタ




2024-11-16 (土)   ウディタ3.5開発中その5 自動移動・サウンドのパン機能など
 ということでウディタ3.5開発の経過報告、その5です!
 「これまで欲しかったけど入れられなかった新機能」をまだまだいっぱい追加中!
 今回もご紹介していきます!


●動作指定に「自動移動」機能を搭載!

 以前、隠しコードで「経路探索機能」を実装しましたよ~とお伝えしましたが、次はもっと使いやすいよう、「動作指定」に落とし込んでみました!
 それがこの「自動移動」コマンドです!
 紹介映像を作りましたのでよければまずそちらをご覧ください!

 ※映像は開発中のものです


 この「自動機能」、行き先を指定すれば勝手にそこまで経路を判断して歩いて行ってくれます!
 モードとしては[単純][スマート][大負荷]の3種が用意されています。それぞれ以下の違いがあります。


 
- 自動移動[単純]:最初に「マップ通行設定のみ(Evはないものとする)」で移動ルートを計算し、以後はルート通り進みます。進路上に他のイベントや主人公がいた場合は止まります。
 → プレイヤーやイベントが道を塞いで止まってしまっても問題ない状況向け。
 
- 自動移動[スマート]:最初に大局的な進行ルートを「マップ通行設定」のみで取得し、基本はそれに沿って移動しますが、他イベントや主人公が経路を塞いでいた場合は少し迂回して移動します。
 → それなりに賢く移動させたい場合はこれがおすすめです。負荷もほどほど。
  ただし「イベントでゴールまでの通路が塞がれている」場合は途中で止まってしまいます。
 
- 自動移動[大負荷]:大局的な進行ルートも「マップとイベント両方込み」の当たり判定で取得し、数歩ごとに何度もおおまかなルートを再取得し直します。負荷が高いです。
 → イベントが完全に道を塞いでいて、非常に遠回りせねばならない状況でも経路探索に成功する可能性があります。
  ただし「ランダム移動するキャラがたまたま経路を塞いでいる」場合もそれに敏感に反応して大局的な進行ルートを変えてしまったり、「道がない」と判断して一時的に止まってしまったりする場合があります。

- 「自動移動一歩のみ」オプション: 自動移動のゴール地点まで行かず、1歩移動した時点で処理を終了するオプションです。ゴール地点が頻繁に変化する状況で有用です(たとえばこれナシで「自動移動」すると、追いかけっこのときも「3秒前の主人公の位置」を追い続けてしまい、そこに一回着くまで自動移動経路が変わらない問題が起きます! そういうときに「一歩のみ」オプションをオンにして「動作を繰り返す」ようにしておけば、1歩で終了→最新の場所を経路探索して1歩移動→……と繰り返すので常に最新の位置を追い続けてくれます。ただし負荷は高くなります)


 という感じ! 基本は、キャラを避けて移動させたいなら「スマート」、そうでないなら「単純」モード、ゴール地点が移動する場合は「自動移動一歩のみ」をオンにする、で問題ないと思います!

【これからの動作指定】
 動作指定でこれまで↑↑→→↓↓←↑←↑みたいに1歩ずつ指定していたのが、今後は行き先までの経路を「自動移動」ワンボタンで設定できるため、動作指定の作業はかなり簡略化されると思います! 後述の「マップ表示」機能と合わせればさらにサクサク入力可能なはず!

 もちろん機能面での広がりも大きく、「スマート」自動移動で「たくさんイベントが歩く中をうまくよけて通らせる」ことがワンボタンでできるようになったのは非常に大きな点です。
 想像してみてください。酒場のウェイターやウェイトレスさんが、歩いている人を避けながらテーブルに食事を配膳しにいったり食器を回収しにいくような指定だってものすごく簡単にできるようになるんですよ!
 
 なんなら「自動生成されたマップ」や、「自分で1マスずつ壁を配置して作った村」内ですら、簡単に道を判断して移動させられるようになるというのはものすごく大きなメリットのはず! 仕事場に行って働いて、夜になったら自分の家のベッドに帰るなんて処理も簡単!
 作れるゲームの幅も一気に広がるはずです!



●動作指定中の「マップ表示」機能も!

 そして引き続き「動作指定」画面の話なのですが、ウディタ3.5からは動作指定を設定中に並行動作するマップ画面を表示させることが可能になります! むしろどうして今までなかったんだ感がありますが、実装はすごく面倒臭かったです!

 ↓並行して表示できる「マップ画面」搭載!


 このマップ画面は、「クリックした地点の座標」や、「そこにあるイベント名」を確認できるだけでなく、【ダブルクリックすると動作指定画面の「座標指定」欄にその座標がセット】されます!

 なので今回の「自動移動」コマンドと合わせれば、

 マップをダブルクリック(座標が格納される) →
 「自動移動」をぽちっ →
 次の移動先をダブルクリック →
 「自動移動」をぽちっ


 という手順を繰り返すだけで、あっという間に経路指定ができるのです!
 もうこれまでのように座標をメモしながら↑↑→→とか一歩接近とか入力しまくらなくてもいいんです! 
 
 これによって動作指定周りの入力効率が冗談抜きで10倍くらいになると思いますので、キャラを動かすのもこれまで以上に気軽にできると思います。



●サウンドのパン機能!

 お待たせしました! 「サウンド」コマンドについに『パン』機能が搭載されます!
 その前に「パン」って何?って思われる方も多いと思いますが、これは「音の左右バランスを調整する機能」のこと! 右から鳴らすとか、ちょっと左から鳴らす、みたいなことができるわけですね!
 
 以下はパンの見本映像! ヘッドフォン推奨です(画質が低すぎるとモノラル音声になってパンが体験できないので、その場合は画質を「360p」以上に上げてみてください)


 上の映像にあるように、「BGM・BGS」の再生においては、同じファイル名を指定して違うパンの値をセットすることで、「再生を止めずに」パンだけ変更が可能です!
 効果音は「再生開始時にしかパンをセットできません」のでその点はご注意を!
 もし右から左にぴゅ~んと流れる音を流したい場合は「BGS」などをご利用ください。
 
 このサウンドのパン機能、音の位置にこだわる場合は、たぶんどんなゲームにでも使えます。
 「右から戦闘の音が聞こえる!」といった情報はアクションゲームでも有用ですし、ホラーゲームで部屋の前を通り過ぎていく何者かの足音を表現したりするのも面白そうですね。
 パンは「-255(左)~0(中央)~255(右)」の範囲で設定可能で、いつものように「変数」でも指定できます。



●DBやコモンからのデータベース参照が「タイプ名」でも可能に!

 このタイトルを見てすぐ意味が分かる人は相当のウディタリアンです!
 データベースの「データ名」や「データ内容の特殊設定」、コモンイベントの「入力設定」などにおいて、データベースから「データ名」を読み取って番号と一緒に並記する機能があります。それを「データベース参照」と言うのですが、これまではDBのタイプには「番号」しか指定できませんでした。
 が! Ver3.5からは「タイプ名」の【名前】でも指定が可能となります! 以下の画像のように!



 「タイプ呼び出しなんて【名前】で呼んでも【番号】で呼んでも同じじゃん」と思われる方もいらっしゃるかもしれませんが、使い込んでいくと全然そうじゃないんですよ! 開発が長期に渡ると「DBのタイプの場所(番号)を入れ変えたい~!」ってなることが意外にあって、そんなとき番号でタイプ指定してるとヘタに場所(タイプ番号)が変えられなくて困るんですよ!
 一方、そこを「名前」で指定しておけば、DBタイプの番号が変わってもそのまま読み込まれるので安心! というわけです!(まあ番号は変えられても、今度はDBタイプ「名」の方が簡単には変えられなくなるんですけども。でも名前は普通変えないですからね)

 ということで、これからはデータベースも整理しやすくなるでしょう!
 私もいま開発中のゲームで「DB並べ替えたいなあ、でも面倒臭くなるしなあ」と50回くらい思ったので、この機能を使ってきれいに並べ替えたいと思います。


●オートタイルアニメ速度変更!

 ウディタのオートタイルは、画像を横に長くしてアニメパターンを作っておくと自動でアニメーションさせることができるのですが、これまでは「毎秒3コマ(20フレームに1回)」のスピードでしかアニメーションさせられませんでした。
 ですが今回、オートタイルにフレーム数を指定する手段が搭載されます!

 たとえば「Water_Auto.png」というオートタイルがあったとき、「Water_Auto_FRAME=5.png」という感じに「_FRAME=??」と入れると、1コマのアニメーション時間をそのフレーム数に変更できるのです!(※1フレーム=1/60秒)

↓滝のアニメーション速度を変えた見本
https://twitter.com/WO_LF/status/1853416989018214459

 これまでも強引にピクチャでオートタイルを再現してアニメーション速度を変えることもできなくはありませんでしたが、今回からはもっとマシな方法で速度を変更できます! よければぜひご利用ください!



 という感じで、今回も新機能盛りだくさん!
 次がたぶん最終のご紹介になると思います! つまり公開もおそらく間近という雰囲気になってきますので、ご期待ください!

 とはいえ、今回いじった分がかなり多くて致命的なバグもまだ結構ポコポコ出ているため、いつ出せるかははっきりと明言しにくい状況です。「11月末か12月頭くらいに出せたらいいなあ!」くらいで見込んでおりますが、あまり信用しすぎずにお待ちください。
 2024-11-16 (土) web拍手 by FC2 カテゴリ: ウディタ




2024-11-02 (土)   ウディタ3.5開発中その4 ピクチャリンク・DBソートなど
 ということでたぶんその4くらいになったウディタ3.5開発の経過報告です!
 引き続き「これまで欲しかったけど入れられなかった新機能」をいろいろ追加中!
 今回もご紹介していきます!


●キャラへのピクチャリンク機能

 今回の目玉! マップイベントやプレイヤーなどのキャラクターに『ピクチャをリンク』させることが可能になります!

 ピクチャをキャラにピクチャリンクさせるとどうなるかというと、『ピクチャをキャラクターに永久に追従させられる』ようになるのです!
 これは「マップイベント」を使う自作システムを作り込む人にはうれしい機能!
 もう並列イベントでゲージのピクチャをキャラ位置に動かし続けなくてもいい時代になります!

 より厳密には、ピクチャリンクすると「キャラの(マップズームも加味した)画面上のX・Y座標をリンクしたピクチャに『加算』し、マップズームに応じた『拡大率変化』をかける」という処理が行われます。一言でいうと、キャラクターにピクチャがくっついたような動きをするわけです。

 紹介映像も作ってみましたので、よければぜひご覧ください!



 で、ピクチャリンク機能は「エフェクト」コマンドの「キャラ」欄から使用可能でして、設定可能な内容は以下の通りとなっています。「マップズーム(の拡大率)への連動」は外すことも可能です。

ピクチャ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ターン中の戦闘の行動順を計算する、といったことに始まり、「アイテムの性能別ソート」や、あるいは項目に「乱数」を入れてから並び変えることで「シャッフル」させることだって可能!
 いちいちこういうソート処理を苦労して作らなくてもよくなるので、これからはその労力を他に回せます!

 どこまでできるかの紹介は下の動画で説明しておりますので、よければぜひご覧ください(でも動画内で素早さを「小さい順」にソートしてるのはちょっと変ですね! 素早さで行動順を算出するなら「大きい方」から並べないと!)





●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の情報をお楽しみに!
 2024-11-02 (土) web拍手 by FC2 カテゴリ: ウディタ
2024年11月


▲一番上へ戻る


Copyright © SmokingWOLF / Silver Second