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

2024-10-19 (土)   続々ウディタ3.5開発中 経路探索&キャラレイヤー強化ほか!
 引き続きウディタ3.5への改修作業を続行中です!(3.40呼びしてましたが搭載予定の新機能が多くなりすぎるので、3と4の中間大規模修正として「3.5」呼びにすることにしました)

 ここまでにご紹介した目玉新機能は「空イベントの生成機能」「フォント暗号化」など!
 今回も、「作れる内容」や「作り方」が大きく変わる目玉の新機能が続々登場です!


◆ウディタ3.5の新機能予告、続き!

【○経路探索機能!】

 まず「経路探索機能」とは、スタートとゴールの座標だけ指示したら、ゴールまでの道順を自動的に算出してくれる機能のこと!
 紹介動画を作りましたので、見られる方はまずそちらをご覧ください! 直感的に理解できると思います。



 私の環境だと、迷路みたいな道でも500マスまで先の道の経路を1msくらいで算出可能でした!(1フレーム16.6msなので、それを超えない処理時間に抑えれば処理落ちはしないことになります)

 まともにコモンイベントとして作ると10マスくらいの経路探索でも重くなることがあるので、この速度で動作する経路探索処理が基本機能として使えるのはかなり大きいと思います。



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

 経路探索が簡単にできれば、以下のような処理の実現可能性がグッと上がります!

●マウスクリックした地点まで、NPCや障害物を避けてキャラを移動させることが簡単に!
 
●ガイドボタンを押すと次の目標地点までの道順がラインで表示される、みたいな演出も当然可能!
 
●生活系ゲームで、キャラがベッドから起きて仕事場に行って食堂でご飯食べてまたベッドに戻る、みたいな処理だって従来より非常に簡単に作れます!
 
●建物も自分で設置できるクラフトゲームや開拓シミュレーションゲームでも、経路を自動認識して移動させることが簡単に! 木こりして指定箇所に木材を運ぶ、みたいな処理も実現しやすく!
 
●ローグライク(不思議のダンジョン)系ゲームでも、モンスターの移動経路や最短の接近ルートが簡単に算出可能になります!
 
●タワーディフェンスゲームで「敵の侵攻ルート」を算出したり、「自分の設置物で敵のルートが変わる」「ちゃんと味方陣地までの経路が空いているかを調べる」といった処理も低コストで実現可能になります!
 
●追いかけっこ展開でも障害物を避けて移動可能です!





-【経路探索機能の使い方】

 使い方はちょっとマニアックです!
 たとえば「文字列操作」の「隠しコード実行」コマンド(Ver3.5で搭載されます)から

 <<FIND_PATH_DIR8_SX=1/SY=2/EX=6/EY=5>>

 と指定すると、マップの(1,2)座標[SX=/SY=の値]から(6,5)座標[EX=/EY=の値]までの道順を、以下のような文字列として得ることができます。

  966662222/END

 算出された移動経路は、テンキーに対応した1~9の方向を羅列した文字列で示されています。
 9なら「右上」、6なら「右」、2なら「下」なので、上の経路は【スタート地点の(1,2)座標から右上、右、右、右、右、下へ4歩すると(6,5)に着きます】という意味になります。

 方向じゃなくて1歩ずつの座標で知りたいよ! という人も安心! 隠しコードに「/POS」を追加すれば、以下のように得られる経路の文字列が「1歩ずつの座標」として返されます。

 <<FIND_PATH_DIR8_SX=1/SY=2/EX=6/EY=5/POS>>
  ↓結果
 2,1/3,1/4,1/5,1/6,1/6,2/6,3/6,4/6,5/END

 あとは「文字列操作」でいいように切り取って使ってください! という感じです!

 なお、この経路探索は今のところ「1マスごと」の処理のみ可能です。1マスまるまる通行可能でないマスの場合、「通行できる」と認識されない可能性があるので、そこは注意してください。




-【イベントの当たり判定を考慮した経路計算も可能!】

 このコマンド、素のまま使うと「マップの通行判定だけ」を考慮したルートを算出するのですが、隠しコードに「/EV=-2」(-2=主人公、ここには動かすイベントのIDを入れる)と入れると、『イベントの当たり判定を考慮した経路』を算出できます!
 <<FIND_PATH_DIR8_SX=1/SY=2/EX=6/EY=5/EV=-2>>みたいな感じですね。マップイベントを動かしたいときは、マップイベントID3なら/EV=3みたいに指定します。

 以下の投稿みたいに、多数の猫が上下してる道でも猫を避けて移動が可能です! ただしイベントのように動くものも考慮する場合、毎フレーム経路を計算しなおさないといけませんので、計算負荷は上がります。




-【経路探索にはどういうアルゴリズムを使ってるの?】

 ここは余談ですが、経路探索アルゴリズムとしては、高速に最短経路の近似解を求められる「A*(エースター)」アルゴリズム(Wikipedia、処理見本アニメあり)を使用させていただいております。
 すごく簡単に言うと、「目的地への道の中で、より近そうな道から優先して探すことで、全ての道を試すよりもずっと速く経路を見つけられる」という仕組みのアルゴリズムです。
 ただし、このアルゴリズムで得られるのはあくまで近似解なので、常に「【最も短い】経路」が算出できるとは限らないことに注意してください。2番目くらいの距離の道を最終結果として返すことも多いです。
 ですがプロのゲーム開発の現場でも使われているくらいの優秀なアルゴリズムで、だいたいは良い経路を算出してくれます。多少最適じゃない道を出しても、ゲームという媒体なら「キャラやナビがポンコツだから」などで説明できますから安心!(?)




-【いずれはもっと簡単に使えるようにしたい!】

 こんな風に隠しコードを使ったり、「文字列操作」を駆使しなければならないことから、いまのところ経路探索機能は『自作システムを組める人向け』の機能と言えます!

 が! もし(私の作業負荷とゲーム内負荷の両方の意味で)軽い負荷で作れそうなら、「動作指定」内に、目標地点まで自動で移動してくれる「自動移動」処理なども入れたいなあと考えています。
 うまくいけば、一歩ずつ歩く方向を指定する必要があった時代が終わるかもしれません! そうなればイベントシーンの作成負荷も大幅削減されますよね。

 ということで、自作システム作者さまにも普段使いの方にも夢が広がる経路探索機能の搭載、お楽しみに!




【○キャラチップレイヤー機能が強化! レイヤー無制限化+サイズ不問+1レイヤーごとにエフェクト可能に!】

 ずっと『(α版)』と書いてあった「重ねキャラチップ」機能ですが、今回の修正でたくさん進化して正式版となります!
 こちらも映像を作りましたのでよければご覧ください!




-【レイヤー5枚制限が撤廃、無制限に! レイヤー番号も好きに指定可】

 これまではキャラの「上」のみに5枚までしか置けなかったキャラチップレイヤーですが、これからはキャラの「上下」に「無制限に」重ねられるようになります!
 さらにレイヤー「-1000」みたいに好きな番号を入れても問題なく動作します!
 扱いがかなり雑でもよくなったので、キャラメイク系のゲームでもキャラチップに色んな服を着せたり武器を持たせたりできるようになるでしょう。



-【キャラ本体の裏側にも追加可能に】

 さっきもチラっと言いましたが、キャラの「裏側」にもレイヤーを追加可能です!
 あとから表にも裏にも好きに追加できるので、これまでのような少ない枚数をギリギリで運用する必要がなくなります。ザツに管理できるのは大事!



-【重ねる画像サイズが自由に!】

 これまでは「重ねるキャラチップ」は『本体とまったく同じ画像サイズ』でなければダメでしたが、最新版ではそこが自由になります!
 ちょっとくらいフォーマットが違ってても大丈夫! 
 本体よりだいぶ大きい乗り物に乗せることだって可能になります。



-【1レイヤーごとに色を変えたりXY座標をずらしたりできるように!】

 さらにレイヤー1枚ごとに色相や彩度、明るさを変えたり、XY座標をずらしたりが可能になります!
 色違いの服を用意する必要はなくなりますし、レイヤーごとに多少のずれがあった場合はこれで補正可能です! これで開発コスト削減!
 やり方は以下のように、画像ファイルの前に<>で挟んでオプションを指定するだけ!

 <X+=4/Y+=-2/HUE=90>CharaChip/Chicken.png
 この例だとX座標に+4、Y座標に-2、色相90(0~360の範囲)の補正をかけたChicken.pngのレイヤーが表示されます。

 他にも、/HALFと入れると画像サイズを半分にしたりできます! ウルファールを1/2サイズにちっちゃくして船に乗せたりも!





【○『ピクチャ挙動Ver2』が搭載!】

 これまでのピクチャ挙動は、「表示」時の挙動が状況次第で違ってややこしかったり、ピクチャを挟めるレイヤーが少なかったりして少し不便でした。
 同じIDのピクチャを使った場合、文字列ピクチャを「表示」し直すたびに不透明度ゼロから表示され直したり、文字列から画像ピクチャを出すとワープしたり、画像ピクチャから画像ピクチャを出すとワープせずに移動したりと一貫性がありません! 「消去」指示すると「移動予定先」にワープしてから消えるという変な動作もありました。

 なので、ここでいろいろ整理しようと『ピクチャ挙動Ver2』の搭載を決定しました!
 Ver1の旧挙動とVer2では、以下のような挙動の差があります。


●これまでのピクチャ挙動Ver1[旧挙動]
レイヤー挙動:ピクチャ番号マイナス時の表示レイヤーが以下のようになります。
 「-1~-99999の場合は『キャラの下 ・ マップの上』に表示」
 「-100000以下の場合は『マップの下 ・ 遠景の上』に表示」
 
【表示】コマンド時の挙動
 すでに同IDでピクチャが表示されている場合、「異なる画像で【表示】」または「文字列ピクチャの【表示】」をした場合に、
 - 処理時間が残ってる状態だと『不透明度』が「直前のピクチャ指定時点の値の状態に戻る」
 - 文字列から画像、画像から文字列、文字列から文字列に切り替わるときに「新しい場所に瞬間表示される」という挙動になります。
 - 「ファイル読込ピクチャ」で全く同じ画像を【表示】した場合のみ、【移動】と同じ処理になります。
 - 他にも、「処理時間」ありで「消去」されるときは「移動予定先に瞬間移動して消え始める」という挙動になっています。
 という具合になかなかのカオス具合になっていました。


 ↓

●ピクチャ挙動Ver2[ver3.5以降]
レイヤー挙動:ピクチャ番号マイナス時の表示レイヤーが以下のようになります。
 「-1~-99999なら『フォグの下 ・ ★マップチップの上』に表示」
 「-100000~-199999なら『★マップチップより下 ・ キャラや▲マップチップの上』に表示」
 「-200000~-299999なら『キャラや▲マップチップより下 ・ マップの上』に表示」
 「-300000~-399999なら『マップより下 ・ 遠景の上』に表示」
 「-400000以下なら『遠景の下』に表示」
 
【表示】コマンド時の挙動
 すでに同じIDでピクチャが表示されている場合、処理途中でも「座標」や「不透明度」はその瞬間のパラメータを常に引き継いで処理されます。
 - すでにピクチャ表示済みの場合、常に【移動】コマンドと同等の処理が行われます。シンプル!
 - また「処理時間」ありで「消去」される場合も、「実行された瞬間の座標」で止まって消去される自然な動作になります。





 という感じです! これまで開発されていた方はVer1のままにしておく方が安全ですが、今後の新作開発ではVer2をご利用になることをおすすめします!
 特に「★チップの下・キャラの上」あたりのレイヤーは従来ではピクチャを挟むことができなかったので、ムズムズしてた人も多いと思います。
 今後はもうちょっとピクチャも扱いやすくなると思います!




【○マップだけをピクチャに取り込む『<MAP_SCREENSHOT>』機能が搭載!】

 すでにVer3.0で、画面全体をピクチャとして取り込んで使える「<SCREENSHOT>」機能が搭載されましたが、Ver3.5ではマップ画面だけを取り込む「<MAP_SCREENSHOT>」機能が搭載されます!
 使い方はピクチャの画像ファイル名に、「<MAP_SCREENSHOT>」と入れるだけ!
 そうするとその瞬間のマップがピクチャとして表示できます!



【「全画面取り込みと変わらないんじゃ?」って? いえいえ違うんですよ!】
 このマップ取り込み機能、画面全体を取り込むのとあんまり変わらないように見えますが、重要なのは「ID0以上のピクチャを無視できる」という点!
 というのも、全画面を取り込んだピクチャを毎フレーム更新したりすると「2フレーム目から出した全画面ピクチャそのものも取り込んで表示してしまうので見た目がカオスになっていく」という問題があったのです! 絶妙に使いにくい!

 ですが今回取得可能になったのは「マップのみ」なので、これを使えば「メニューやメッセージウィンドウ」、「直前に出した全画面ピクチャ」を取り込んだりせず、きれいなマップだけが使えます! よって、さらに画面取り込みの使い勝手がよくなるわけです!


【<MAP_SCREENSHOT>で何ができる?】
 マップのみを毎フレーム「表示」し直せば、当然リアルタイムのマップがピクチャとして好きに表示可能! これでできる表現の幅も格段に広がります!
 たとえば何に使えるかというと、演出強化の面では「画面を斜めや上下逆さにしたり」「サイケな画面演出や崩れたマップ画面を演出したり(細かくパターン分割して座標をずらしたり動かしたり、個別に色変えしたり)」「【イラスト上のディスプレイ画面】にマップ画面を自由変形ではめ込みしたり、その状態のままゲームを続行させたり」なんてことも可能になります!
 他にもプレイ面での強化としては「広大な範囲の全マップを裏で出しておいて、プレイ時はそれをCUT機能で切り出してピクチャ拡大して表示し、別々の場所で起きていることを分割映像で見せる」なんてことも実現可能です。「ダンジョンに侵入者が入ってきた! 今の侵入者はこういう動きをしている!(侵入者付近のマップ画面を切り取ってピクチャ表示する)」なんていうライブカメラ的な演出もできます! 画面内に全マップをおさめるのがちょっと難しいですけども。


【ミニマップ作りにも!】
 さらにマニアックな話をすると、ウディタにおける「マップ画面」とはすなわちピクチャIDが「-1」以下のレイヤーでもあります!
 つまり『マイナスのピクチャでお絵かきした内容をで保存しておいて使う』という画像バッファみたいな使い方も可能!

 特に便利そうな用途として考えられるのがマップごとの「ミニマップ」自動生成機能です! マップに侵入した際やロードした際、裏でミニマップの画像を作って「」で撮影しておき、あとはそれを「切り出し」表示したり「マスク」を使ったりして表に表示することで、良い感じにミニマップ自動生成&表示ができそうです!

 実装できる技術さえあればアイデアは無限大! ぜひ色々考えてみてください!



 という感じで、ここまででさえ、「作り方そのもの」や「作れるゲームの幅」まで変わってしまう修正が盛りだくさん!

 私の介護もいったん終わり、長時間集中し続けてもよくて夜ずっと寝られる環境を得たことで5年ぶりくらいに全力が出せるようになってるので、プログラミング筋(きん)も絶好調です!
 さらに他の新機能にもチャレンジしていきますのでお楽しみに!


 便利度が上がるたびに「なんで自分の『片道勇者2』の開発でこれがなかったんだよォォォォー!」ってすでに何回か叫んでいますが、もっと自分が叫んじゃうような新機能も入れていきたいですね。
 引き続きがんばります! 次回の新機能紹介もこれに劣らないものが出せればと思いますので、お楽しみに!
 2024-10-19 (土) web拍手 by FC2 カテゴリ: ウディタ




2024-10-05 (土)   続、ウディタ中規模アップデート作業中!
 ということでずっとみっちりウディタの修正作業中です!
 セキュリティ周りみたいな、「表にご報告しにくい割に膨大な作業量の場所」はおおよそ済んだので、あとは楽しい新機能搭載フェイズ、というところです!

 今回はここまでに実装に成功した、ちょっと興味深いであろう新機能についてご紹介していきます!


◆Ver3.40の新機能、一部紹介!

【空のイベント作成機能(※裏技)】

 一部の人から割と待望されていた「空のイベント」を作る機能が搭載されます! うまくコマンドにおさまらなかったので文字列操作の隠し機能による裏技になってしまいましたが上級者の方しか使わないと思うので問題ないはず!
(隠し機能:「文字列操作」の「に↓のファイル内容読込」を選んで「<<」から始まる裏コードを入れると使える機能)

↓空イベント生成コマンドの開発中デモ。大量の夕一が新イベントとして生成されています。まだ開発途中なせいで初期位置が(0,0)になっており目標位置までニワトリがコンベア出荷されてるように見えますが、完成版では目標位置に「瞬間表示」で出現します


 この『空イベント生成機能』、使い方としては「文字列操作」の「に↓のファイル内容読込」に隠しコードとして

<<MAKE_EVENT_X=4/Y=2/TR=1>>
CharaChip/[Chara]Animal_Chicken.png
(※続けて1行で入力)

 みたいに指定すると、座標(4,2)に、「決定キーで起動」(TR=1)する、画像「CharaChip/[Chara]Animal_Chicken.png」の新イベントを設置することができます!
 XY座標や画像だけでなく、イベントの「起動条件」も(TR=1:決定キー、2:プレイヤー接触、3:イベント接触)から指定できます。

 「でも生成されたイベントはコマンドが空だから『起動条件』なんて関係なくない!?」と思われるかもしれませんが、今回の中規模修正でプレイヤーが起動した空イベントのIDを検出できるようにする予定なので、意味はあります!
 空イベントでも「起動さえ検知」できれば、熟練者の方なら何とでもしようがあるはず!
(たとえば「変数操作+」の中に「今フレームの決定キー/接触で起動したマップEvID」を得られるコマンドを新たに付けたりすれば実現できると見込んでいます)

 これらの機能を駆使すれば、究極的にはマップエディタで1キャラも置かなくったってイベントを配置・制御できるようになります!
 ただしイベントの最大配置数は「10000個まで」となっておりますので、そこはご注意を。

 また、「生成されたイベントID」も返り値として得られるので、そこもご安心ください(文字列変数に"12"みたいな文字列が入るので、「変数操作」を使って数値に変換してください)


【ついでに「イベント削除機能」も搭載!(ただし空イベントのみ)】
 ちなみにイベント生成機能に対して、「イベント削除機能(<<DELETE_EVENT_ID>>(イベントID) )」も作りました。ただし、こちらは実質「空イベント」しか消せません。
 コマンド実行途中のイベントが消えるとクラッシュしてしまうことが分かったので、「何もイベントコマンドを持っていない」「ページ1つだけ」かつ「自動起動でも並列起動でもない」のイベントの場合だけ削除可能となっています。



【このイベント生成・削除機能で何ができるか?】
 で、空イベントが生成できると何がいいかって、色々あるんですよ! たとえば以下のような用途が考えられます。


●『牧場物語』系みたいな「作物が無限に出てくるゲーム」や、「キャラやアイテムが置き放題なオープンワールドゲーム」を作る場合でも、あらかじめ空のイベントを大量に作っておく必要がなくなります!
 これまではその用途でマップイベントを使うために、マップに5000個(エディタの限界数)の空イベントを作られたという方もいらっしゃいますからね! これからはそういったことをしなくても、必要なときに空イベントを作れば大丈夫になるわけです。

●他にも、「どのマップに行っても100人くらい仲間がついてくる」とか、「そもそも特定マップに固定配置のキャラがいなくて、みんな常にどこかの色んなマップを歩き回っている」ようなRPGを作るときだって便利になります!

●「マップチップの一部をキャラチップで代用したい」場合にも有用です!
 マップチップの「タグ」に応じて「自動でその場所にマップイベントを配置し直したりする」なんてことも少ない作業数で実現できるようになるので、マニアックな配置をしたいときでも安心です!
(さっきのMAKE_EVENTコマンドの画像指定で4みたいに入れるとタイル画像が設定できます)


 従来でも、これらはどれも「全マップに大量の空イベントを作っておく」ことで対応可能な案件ではありましたが、そんなことまでして作りたくない場面も多かったでしょうから、今後はそういった作業が必要だった作品ももっと作りやすくなるはずです!
 すでに「夢が広がる~」とおっしゃっている方は、そういうところで挫折した経験や苦労された経験がお有りなのだと思います。今後はそこもラクになりますよ!




【ファイル個別暗号化(プロ版機能)で「フォント暗号化」ができた!】

 「ファイル個別暗号化機能(復号キーなどを設定して.wolfxファイルに変換できる)」自体は前回もご紹介しましたが、それで得られた副産物として、『フォント暗号化』が可能になりました!

 たとえば「UmePlusGothic.ttf」をファイル個別暗号化すると「UmePlusGothic.ttf.wolfx」ファイルに変換されるわけですが、これをGamePro.exeと同じ場所や、Dataフォルダ内に入れておくと、普通のttfファイルと同じく起動時に読み込みが可能です!
 それでいてttf.wolfxは暗号化されているので、直接Windowsで読み込むことはできなくなります。ファイル名も「Font1.ttf.wolx」みたいに変えれば何のフォントを使っているかも分からなくなるでしょう。

 こういう形で使えば「二次利用可能な形での再配布」ではなくなるらしいので、ある程度は使えるフォントの幅も広がると思います。もちろん、フォントごとの規約はしっかり守ってくださいね!
 ただしこの「ファイル個別暗号化」機能は『プロ版専用』なので、その点はあらかじめご了承ください。ウディコンなどでは使えないってことですね。




【エディターのウィンドウサイズの調整や、フォント切り替え(2種)ができるようになった!】

 「エディターオプション」からエディターのウィンドウサイズを調整できるようになりました!
 「マップイベントウィンドウ」や「イベントコマンド挿入ウィンドウ」が思ったより幅を取るからあと1割だけ小さくしたいんだけど……という私みたいな人や、3840ディスプレイ持ってるけどWindowsの拡大率100%だとだとウディタ画面が小さすぎるよぉぉ! という人のために搭載されます!

 といっても技術的な都合で拡大できない場所もあるのでそこはご了承ください。いつも見るであろう「マップ/コモンイベントウィンドウ」や「データベースウィンドウ」、「コマンド入力ウィンドウ」あたりは押さえてありますが、メニューアイコンや上部メニュー欄などの拡大縮小はちょっと難しそうだったのでできていません。


【エディターのフォント変更機能】
 あとフォント変更も2種から選択可能に!
 これまでは「MS UIゴシック」というカクカクフォントでしたが、これからは「Meiryo UI」というなめらかフォントも選べるようになります! また、「太字」への切り替えもできますよ。






【「マップエディタ」や「場所移動の移動先選択」で「x2」拡大モードを追加!】

 これもディスプレイの画面解像度が上がってきた時代に対応するためのもので、マップチップを1/1よりさらに大きい「x2」ズームで表示できるようになります!
 一見簡単に作れそうに見えましたが、ちょっとやりかけたらすごい作業量が必要だったので今回のチャンスを待っていた部分です。需要はそこまで高くなかったかもしれませんが、この機会に入れられて何よりです。





 という感じで、今も毎日全力でウディタ修正中です!
 いつものことですが早く終わらせないと作業の時給換算がマズいですからね! それが全力で頑張れる動機になっているのは良いことではあるんですが。

 実装に成功すれば紹介に値するであろう新機能の予定は他にもありますので、引き続きお楽しみに!
 2024-10-05 (土) web拍手 by FC2 カテゴリ: ウディタ
2024年10月


▲一番上へ戻る


Copyright © SmokingWOLF / Silver Second