投稿記事

2021年 05月の記事 (3)

Heliodor 2021/05/29 17:30

あやかし紅白戦 進捗確認版2(再掲)

進捗確認版2を調整したバージョンを、有料支援者向けに公開です。

ver0.71→0.80にアップデートされていますが、昨年の進捗確認版2を持っている方は、改めて課金する必要はありません。(当該の記事から今回と同じものをDL出来ます)


最近、過去記事を購入される方がたまにいらっしゃるので、せめて少しでも新しいバージョンを……ということで用意しました。

前回のものから、内部処理やゲームバランスは色々変わっていますが、目新しい追加要素はありません。


最終的には体験版として無料公開される内容のものですので、これだけのために課金はお勧めできません。ホントに。

フォロワー以上限定無料

まずは無料プランで様子見を。 お気軽にフォローしてみて下さい。

無料

【 500円 】プラン以上限定 支援額:500円

このバックナンバーを購入すると、このプランの2021/05に投稿された限定特典を閲覧できます。 バックナンバーとは?

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

Heliodor 2021/05/26 16:41

白昼夢?

ちょっと気合入れて机とか冷蔵庫を動かして大掃除したら筋肉痛ぅぅぅヴォエェェアヴォエェェェ(痛い)、体鈍ってますねヘリオドールです(挨拶)。


今回は一応プログラムの話なのですが、昼間から夢でも見ていたのか?という摩訶不思議な目にあいました。


開発中のあやかし紅白戦なんですが、普段開発に使っているPCとは別のPC(ド〇キノート)で起動テストしてみたところ、何故か起動に失敗してしまいました。
といっても原因はありふれたものでd3dx9_43.dllが見つかりませんというヤツです。

開発PCは色々なものがインストールされまくっていて、逆にド〇キノートはほぼWindows10クリーンインストール状態。
こういう、何かが足りない系のエラーを確認するのに実に便利です。



……いや、でもおかしい。

ライブラリには DirectX SDK 2004 を使っているから d3dx9_43.dll への依存は無いハズなんですが……。


当サークルのゲームでは DirectX9 のライブラリに最新版ではなく 2004 年版の DirectX SDK 2004 october を使っています。
なぜかというと、これが d3dx9_XX という DLL を必要としない最後のバージョンだからです。

これ以降のライブラリを使って開発した場合、実行時に d3dx9_26.dll とか d3dx9_43.dll といった DLL がインストールされている必要が出てくるんです(最後の2桁の数字はバージョンごとに変わる)
これらは Windows 10 に標準でついているわけではないので、この DLL に依存したゲームをする場合は自分で最新版の DirectX ランタイムライブラリをインストールしなければなりません。

試しに「d3dx9_43.dll 見つからない」でググると分かりますが、市販のゲームでも同人ゲームでも、この「d3d9なんちゃらdll がなくてゲームが起動できない」という問題が実に多いんですよ。

そんなわけで避けられるトラブルは避けるべく、これらの DLL が無くてもゲームが動くように敢えて古いバージョンの DirectX9 を使っているわけです。



で、話は最初に戻りますが、そういう事なので d3dx9_43.dll が足りないというエラーはちょっと変なんですよね。

おかしいな?と思いつつも d3dx9_43.dll をコピーして再度ゲームを起動してみると、今度はXinput1_3.dll がありませんというエラーが出てきました。



XInput なんて使ってないぞ……??

XInput というのはゲームパッドなどの入力機器を扱うライブラリで、DirectInput の後継的な存在です。が、あやかし紅白戦ではゲームパッドの処理に Win32API を使っているので XInput に依存するはずはないのです(Win32API が内部で XInput を使っている可能性も無くはないですが……)

念のためライブラリなどの設定を確認して、キャッシュなどをすべて削除し、クリーンビルドしてみたのですが結果は変わらず。
となると、どこかの時点で思いもよらない場所の設定を変えてしまったのか??


こういう時の常套手段は過去のソースコードに戻して動作確認してみることです。こんなときのための GIT ですよ。
というわけで戻しながら確認してみたところ、4月16日のバージョンからおかしくなっていることがわかりました。


だがしかし。

このときの変更内容って、ソースファイルのフォルダを移動したってだけなんですよね。

それまであやかし紅白戦のソースコードは C:\Ayakashi\ay というフォルダに入っていたのですが、この ay というフォルダが冗長なので ay の中身を丸ごと一つ上のフォルダ C:\Ayakashi に移動したんです。

ソースツリー丸ごとの移動なのでソースコード自体は何も変わっていませんし、インクルードパスも変わっていません(相対パス指定なので)変わったのはプロジェクトファイル内に記述されている、ソースファイルの絶対パスぐらいです。


フォルダを移動する前と後で一体何が違うのか……?
GIT と CMake それに Dependencies を駆使しながら確認してみると、非常に奇妙な結果になりました。


C:\ayakashi\ay にソースコードがある状態でビルドすると d3dx9_43.dll 依存なし、xinput1_3.dll 依存なしの exe になる
(d3dx9_43.dllとxinput1_3.dllが無くても起動する)

C:\ayakashi  にソースコードがある状態でビルドすると d3dx9_43.dll 依存あり、xinput1_3.dll 依存ありの exe になる
(d3dx9_43.dllとxinput1_3.dllが無いとエラーが出て起動しない)



どういうこっちゃ??

ひょっとして ay という名前がピンポイントで特別な意味があるのかと思い C:\ayakashi\ayay にソースコードを置いてみると、
今度は d3dx9_43. dll 依存あり、xinput1_3.dll 依存なしの exe ができました


/(^o^)\



まとめると

C:\ayakashi    d3dx9_43依存あり  xinput1_3依存あり
C:\ayakashi\ay  d3dx9_43依存なし  xinput1_3依存なし
C:\ayakashi\ayay d3dx9_43依存あり  xinput1_3依存なし

ということです。

この段階で原因究明開始から5時間ほど経過していて、もうやる気もゼロです。
ああ、もうムリ……というわけで力尽きて就寝。



そして翌朝―――。

昨日のあのワケ分からない状態は何だったんだ???
と、再びクリーンビルドして試してみたらなんと……

C:\ayakashi    d3dx9_43依存なし  xinput1_3依存あり


はい?

いやいやいやいやいやいや、そんなわけないでしょ。
昨日あれだけ苦労したのに。


そして、どんなにフォルダ移動して試してみても

d3dx9_43依存なし  xinput1_3依存あり

の状態は変わらなかったのです。


……うん、もう忘れよう。きっと夢だったんだ。

とりあえず d3dx9_43 への依存が無くなったのでヨシ!ですよね。

で、なぜ xinput1_3.dllに依存しているのかというところに絞って調べていたのですが、結局デバッグ用に使っている GUI ライブラリ ImGui が内部で XInput の関数を使っていて、

#pragma comment(lib, "xinput") 

という pragma が埋め込まれていたのが原因だった、ということがわかりました。
この行があるから xinput の DLL がリンクされてしまったんですね。ImGUIのゲームパッド関係の機能は全く使っていないので、それらを丸ごと無効化するために

IMGUI_IMPL_WIN32_DISABLE_GAMEPAD

を定義するようにしておいて問題解決です。


……というか、この設定をしていなかったのに「xinput1_3.dll依存なし」になったことがあったけど、あれは一体……一体何だったんだ……。





分かる方がいらっしゃいましたら、是非教えてください。ワリと本気で。

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

Heliodor 2021/05/13 18:24

雑談

どうでもいい系の話です。


銀行のカードにヒビが入って今にも割れそうな状態(※一応ATMでは普通に使える)になってしまったので、正直に「今にも割れそうだから」と理由を書いて再発行申請したら係の人が噴き出してました、ヘリオドールです(挨拶)。
ちなみに、ちゃんと新しいカード発行して貰えました。




さて、今回はこれ。


スナック菓子用トングというものを買ってみました。

これを使うとポテトチップとかポップコーンとかを手を汚さずに食べられるという画期的な商品。箸でいいじゃんと思った。じゃあなぜ買ったのか。





せっかく買ったので使ってみる。




すぐに面倒臭くなる。




更に面倒臭くなる。




どうすればいいんだコレ……。


一瞬「焼き肉に使えるかな?」と思ったんですけどプラスチックなので溶けますよね。

キャンプとかに箸の代わりに持っていく……?いや、やっぱり箸でいいな。



本当に何で買ったんだろう……。










ポテトングとは全然関係無いおまけ

よく聞かれる「あやかし紅白戦はいつ完成するんですか?」という質問ですが、正直私にも分かりません。

むしろこっちが知りたいです。



……と思ったら、ツイッターで闇の占い師さんが占って欲しいことを募集していたので占ってもらいました。

https://twitter.com/helio_dor/status/1392433779189239818
https://twitter.com/eroma_amore/status/1392443066829524992

さんかげつ……三か月後!?マジか




女帝……女帝か……。


※特に意味は無い






https://ch.dlsite.com/matome/122438
闇の占い師さんはここで占いしてくれるゾ!

https://twitter.com/eroma_amore/status/1392735511274344448
なんと言うか本当スミマセン。

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

月別アーカイブ

記事のタグから探す

限定特典から探す

記事を検索