【質問フォーム】
【重要!】 質問する前に必ず、過去に同じ質問がないか検索してください!
もし以下のケースで困った場合は、まずリンク先の文書内に答えがないか探してください。
・まずはこの中からお探し下さい → パーフェクトガイド
・バグかな?と思ったときは → よくある質問
・基本システムの設定方法が分からない場合 → 基本システム講座(by 藤田るいふ氏)
・イベントコマンドなどの仕様が分からない場合 → 公式マニュアル
※書き込む前に少なくとも1日2日は、自分で探したり挑戦する努力をしてみてください。
上記のことを全部やってもどうしても分からなかった場合だけ、以下のフォームから質問してください。
どう実現したらいいか、よろしければアイデアや知恵をお借りできたらと思います。
■[やりたいこと]
近づくと起動するというコモンを作っています。
設定座標と主人公座標の距離を測って、返す値が大きくなったり小さくなったりすものです。
その設定座標の当たり判定の形を自由に設定したいという感じです。
イメージ図としては、中心値を一マス単位で自由な形に設定出来たらという感じです。
□□□□□□
□■□□□□
□■■■■□
□□■□□□
□□□□□□
■[やってみたこと]
距離を測るのではなく、XY配列に直接数値を入れてそれを取得するなど考えていますが、
ただ手動で設定するので、修正が入った時に全部やり直しになるというのがネックです。
行き詰っている点としては、なんとか自動化出来ないか?という点です。
中心となる部分を設定したら、後は自動で数値を返すようにならないか?という感じです。
四角であれば簡単ですが上記のような複雑な形だと、どう処理したものかと悩んでいます。
■[補足]
使用用途はマップの環境音などです。
なので基本、設定した中心座標が移動する事はありません。
ただマップタグ番号を取得する方法は、別処理と被ってしまうので使えません。
(1.)仕様について
【空イベント作成】で作成したイベントはマップ移動時に消失します
(※)注意イベントIDに割り当てられた内部変数はマップ移動後も保持
(3.)作成したイベントをマップ移動後も保持する方法
答え:可変DBに保存する
どのようなイベントを作成するかによって対処は変わります。
質問者のウディタ理解度も分からなければ、具体的に行いたいことが書かれていないと、下記のような長々とした仕様解説をすることになります。
だから、(3.)への答えは、苦しんで頑張ってマニュアルを読んで……としか。
作成されるイベントの、おおまかな分類:
(A)マップ内で作成するマップイベントの処理内容が同一か、否か
(B)イベントを移動させるか
(C)プレイヤーとの距離、条件により変化する移動を行うか(Bと異なる)
(D)Self内部変数を利用するか
主に必要となる処理は下記:(分類の理由もそれぞれの説明に)
『基本』
【空イベント作成】コマンドを実行するたびに、戻り値となる作成イベントIDを可変DBに保存。加えてマップ移動時には、「現在マップの作成済み空イベント保存」と「移動先マップの空イベント再作成」を行う
『可変DBの内容』
・生成したマップID
・割り当てられたイベントID
・生成時マップ退出時のイベントの座標XY
・イベントの種類(異なるイベントを作成する場合)
・イベントのSelf変数(異なるイベントの作成順が変わる場合は特に必須)
これらを要、不要に応じて実装すること
『マップ移動の検知』
(A)【変数操作+】から【現在のマップ番号】の変更を常時並列コモンで監視。
(楽だけど1フレーム遅延、ただしトランジション暗転で隠せる)
(B)【場所移動】コマンドを直接呼ばず、コモンイベントを呼び出し、その中で場所移動コマンドの前後に空イベント管理の処理を置く
『空イベントの起動検知』
(A)マップ内の他のイベントorコモンイベントから並列実行で【変数操作+】その他「[起動]今フレームに決定/接触起動したマップEvID」を確認
(B)空イベントではなく、起動条件&イベント内容が書かれたイベントをコピーする
(こちらは【<<DELETE_EVENT>>】ではなく【イベント一時削除】でのみマップ中の削除が可能)
『マップ内で異なるイベント処理を行うイベントを作成する』
(A)COPY複製元となるイベントそれぞれに記述
(B)マップイベントのSelf変数、可変DB側にSelf変数を用意し、イベントの種類を保存、マップイベント起動時にSelf変数を引数として、それぞれ呼び出す処理を切り替える
『作成したイベントに複雑な移動動作をさせる』
(A)複製元のマップイベントで、ページ毎に移動ルートをカスタムで設定
Self変数をページの条件にして、イベント作成時に変数呼出でマップイベントのSelf変数を代入
(B)並列実行から作成したイベントの動作指定を管理、プレーヤーとの距離を条件にイベント内容を実行する
(【■キャラ動作指定】ループによる移動指示では、起動条件【イベントと接触】が機能しない)
『マップイベントのSelf変数の初期化』
【空イベント作成】時には、Self変数が初期化されない。
(マップ移動時に作成イベントが自動で消去される場合も同様)
作成するイベントに種類があり、Self変数の用途が異なる場合、
初期化されていないSelf変数の値が、その種類のイベントが通常持ちえない数値だった場合に、誤作動の可能性がある。
作成イベントを削除する際には、Self変数の初期化は必須
―――――――――
これらを理解できない場合、
Masaqq様が書かれているとおり、【空イベント作成】を使わず、通常のマップイベントで対処する方が(!!安全!!)です。
ウディタ自体が壊れることは、おそらくありませんが、
【X番の変数呼出】や【コモンイベント呼出、イベントページ呼出】といった間接参照が意図しないタイミングで行われた場合に、エラー原因の特定に苦労することになります
少し日が経ってしまったので、ご覧になっているかわかりませんが…
端的に申し上げると、「少しだけ難しい方法ならあります」という回答になるかと思います。
まず、Masaqqさんが先に回答されているように、ウディタ単体でSteam Deckを判別する事はできません。
判別可能にするには、Steam Deckの判別が可能なアプリを同梱し、連携させる必要があります。
具体的には、いわゆる”ランチャー”アプリを自作し、「ゲーム起動前に判別させ、Steam Deckであることをゲームへ起動時引数を利用して反映させる」のが、比較的工数の少ない手法になるかと思われます。
起動時引数では、普段は”BasicData”から読まれているゲーム設定、DB、イベント、マップ情報のフォルダを変更可能です。
ランチャーでゲーム起動前にSteam Deckかを判別することで、そこから起動時引数を使用してGame.exeを起動することにより、”Windows用”と”Steam Deck用”のフォルダを切り替える事が可能になるでしょう。
*起動時引数に関しては、公式マニュアルのこちらのページをご覧ください→ hhttps://silversecond.com/WolfRPGEditor/Help/01control.html#GAME_ARGV
ランチャーの判断基準となる情報の取得は、SteamSDKの利用がもっとも確実ですが、Steam経由で配信されていないSteam Deck対応ゲームでは、異なる手法での”推測”による判別も広く使われています。
Steam Deckかを”推測”するために必要な特徴に関しては、ネット上に十分な情報がありますが、これらを全項目の一致で判別させようとすると、少なからぬSteam Deckを弾いてしまうことに注意してください。
通常は変更されないであろう固有の環境変数名など、”ソフト面での特徴を複数利用する判別基準”を用いたほうが、比較的安全ではないかと思われます。
(改造している方が多いため、「構成するハードウェアのモデルを基準にすると、パーツ交換による改造がされた個体が弾かれてしまう」というような問題が考えられます)
最近では、チャットAIにプログラミングについて質問したり、アプリそのものを作成させる事も可能になっています。
簡単とまでは言えませんが、印象よりも実装のハードルは幾分低くなっているのではないかと思います。
ご回答、ありがとうございます!!
迅速かつ的確なご回答とご助言、本当に助かりました。
仕様であること、またその背景のご推察ふくめて理解いたしました。
仕様ではないと思い込み、このままドツボにはまるところでした。
その仕様も前提としてうまく利用していけるようにいたします。
通常のマップイベントでの対処についても、
丁寧にご教示いただきありがとうございます。
非常にわかりやすい画像までいただき、重ねて感謝申し上げます。
現在実装したい機能については頂いた助言をもとに実装したいと思います。
ありがとうございました!!!
>1.上記の挙動は仕様なのか? 仕様です。
比較的、新しい機能なため説明書には記載されてなかったようです。 従来のマップEvに近い挙動に寄せたり、まとめてリセットする考えから この仕様になってるのかと思います。
>3.(仕様の場合でも、仕様でない場合でも)どのようなアプローチ方法を行うことで、MapA上に作成した空イベントID10を、MapBなどほかマップに移動し、またMapAに戻ってきた場合でも、残しておけるか。
通常のマップイベントを置いておき、条件でON/OFFなどさせればよいかと思います。
例: 1.MapEvID10をEditor上で作成 2.ページ1の起動条件:self0=1にする、キャラチップ(グラフィック)を設定 3.使用時、なんらかの方法でEvID10のself0=1にする ※X番変数の呼び出しを利用し、1000100を代入した変数=1にする等 ※空いてる通常変数を使った方が動作確認には楽かもしれない
以上になります。
|
下記の通り、お知恵をお帰りできれば幸いです。
[やりたいこと]
隠しコマンド「空イベントの作成」にてmapAに空イベントを作成し、無事作成された。
しかし、主人公がMapBに移動し、再びMapAに戻ると作成したはずのイベントは削除されている。
マップ移動を挟んでも、MapA上に作成したイベントが消えないようにしたい。
(ver. 3.639/ 基本システム利用中およびまっさらな状態の両方で試した)
[やってみたこと、どう上手くいかなかったか]
隠しコマンド<<MAKE_EVENT_X=(数値1)/Y=(数値2)>>にて
MapA(仮)にてイベントを作成した。
この時点でのイベントIDを仮にID10とする。
MapB(仮)にマップ移動を行った後、
再びMapA(仮)に戻ると隠しコマンドで作成したID10のイベントが消えている。
( <<DELETE_EVENT_ID>>の削除コマンドは実施していない)
やったこと1
グラフィックが消えているだけ、もしくは場所が移動している可能性を考えて、該当IDが存在するかを確認したが、ID10そのものが存在していない(=削除されている)状況だった。
やったこと2
マップ移動に余計なコマンドが入っていないことを確認し(主人公の場所移動のコマンドのみであることを確認)、複数のマップで試したが同じ挙動だった。
また、基本システムおよびまっさらな状態にて試した。
結果は同じだった。
やったこと3
パーファクトガイド等にて空イベント作成の個所を読んだが解決しなかった。
[聞きたいこと]
1.上記の挙動は仕様なのか?
(パーフェクトガイド、よくある質問等記載のマニュアル類を読んだが、
マップ移動で削除される記載がなかったため、仕様ではないと考え
質問をしているが、読解ミスなどもあり得ると思ったため質問)
2.仕様ではない場合、何が原因で上記の状況が起きている可能性があるのか。
3.(仕様の場合でも、仕様でない場合でも)どのようなアプローチ方法を行うことで、MapA上に作成した空イベントID10を、MapBなどほかマップに移動し、またMapAに戻ってきた場合でも、残しておけるか。
以上となります。
どうぞよろしくお願いいたします。
ウルフさんの反応がないので代理で。
Xのポスト側で既に把握されてるかもですが
>SteamDeckで起動してるかどうかはSteamSDKというコードがないと判定できないんですが、Game.exeにはそれが入ってないので(Steamの機密保持契約を結ばないと使えない)判定手段がありません。
・今のところウディタ側で判定する手段がない
・判定するための専用プログラムが普通のウディタには入ってない
(普通でないウディタ=多分、片道勇者など専用カスタマイズしてるものとか?)
→現状は物理的に無理らしい
もし仮対応するとしたら、SteamDeck向け初期設定にしたゲームを別で用意するとかですかねぇ……。
以上になります。
> [やりたいこと]
> Steam Deckで起動中かどうかで分岐したい処理がある
>
> [やってみたこと]
> パッドの種類を見る
>
> [やってみた結果、どううまくいかないか]
> パッドじゃなかった
> 入力はキーボード割り当てなのでキーボードと同じ結果が出た
>
> Steam Deckで起動してるかどうかわかる処理ってあるんでしょうか……
[やりたいこと]
Steam Deckで起動中かどうかで分岐したい処理がある
[やってみたこと]
パッドの種類を見る
[やってみた結果、どううまくいかないか]
パッドじゃなかった
入力はキーボード割り当てなのでキーボードと同じ結果が出た
Steam Deckで起動してるかどうかわかる処理ってあるんでしょうか……
回答ありがとうございます。
状況について進展がありました。
原因としては、Chromeのリモート接続で操作していたためでした。
出先で直接マシンを触ることができない状態で、そこまで確認できずにいました。
リモート無しで画面出力されていると
正常に表示されました。
> 返信ありがとうございます。1個書き忘れてました。
>
> ・DirectXの初期化に失敗してるのかも
>
> という話もあったのでそっちかもしれません。
> Game.exeの起動失敗した時のLog.txtとかもチェックしてみると良いかも知れません。
>
> 以上です。
>
> > ありがとうございます。
> > ご指示の通り、ソフトウェア描画モードだと
> > しっかり表示できることを確認できました。
> >
> > であれば確かにグラボがおかしいのかもしれませんね。。。
> > その周辺、調べてみます。
> >
> > > 周囲に聞いてみた感じだと
> > > 下記確認してみてはとのことでした。
> > >
> > > ・グラボが変な設定になってないかどうか
> > > ・config.exeでソフトウェア描画モードではどうか
> > >
> > > 以上になります。
> > >
> > > > やってみたこと追記です。
> > > > マシンの再起動はしております。
> > > >
> > > > あと、ゲームのパッケージ化(ゲームデータの作成)をおこなってみました。
> > > > パッケージ化したものも、Windows11では黒い画面の出力となりました。
> > > > しかし、それをWindows10のマシンに持っていって動かしたところ
> > > > 正常の動きとなりました。
> > > > どうしてもWindows11の環境では画面が黒くなるようです。
> > > > なお、他のWin11マシンはないため、1台のみの検証となります。
YADO 様
返信遅くなりすみません!
いつもサイトを拝見し、参考にさせていただいています
いただいた内容をについてまずは何をすればよかったのか、どうすれば実現できたのか理解し、実装できるよう励みたいと思います!
丁寧な解説、ありがとうございました、、、!