どんな機能が必要かな……?

 取り敢えず簡易的にでもマップを作れる様になったので、ドラクエⅢのスタートの部屋のみのゲームを作ろうと思っています。
 それで、どんな機能が必要なのかと言うことをテキストに書き出していこうと思っているのですが、そこで行き詰まっています。

 マップの当たり判定(通行できる・出来ない・イベント)さえ出来れば、部屋の内部の移動は可能です。それ以外にもスクロールやNPCとの会話、戸棚を開けたり階段を降りたり……後は何があるのかな? 主人公のステータスの管理も必要になってきますね。アイテムの管理とか装備の管理とか、メニューに出てくる機能の一通りは必要です。さらにそれらを表示するマルチウィンドウの機能とか、考えれば切りが無いくらい沢山の機能を実装しなければいけません。
 またフラグの管理(これが一番大事かつ大変)をどのようにするかを考えておかなければならないし、NPCの自動移動もどうやって実現させるのかも考えなければなりません。

 書きだした機能一覧を元に、プログラムに機能を実装していく作業に移る訳ですが、自由に拡張できる様にプログラムを書かないと、町中に出てからは更に色々な機能が必要になってきます。

 これらを考えると、最初の部屋を実現するだけで戦闘やSAVEやLOADを除いた殆どの機能を実装しなければいけないと言うことがわかります。
 素人が趣味で作るプログラムにしては、かなり大規模な物になりそうです。当初の予定ではゲーム開発エディタの完成が来年の7月と言う事だったので、ゲームの中身に関してはまだ真剣に考えていませんでした。

 しかし豚は仕事でやっているわけでは無いので、他にやるべき事もあります。弟の介護は第一優先事項ですし、空き時間にも他の勉強もしたいのでドラクエもどきにかかりっきりになることは出来ません。鬱で動けない日も多々あるでしょうし、本格的にドラクエもどきの開発に入っても、最低でも2年とか3年とかのスパンは必要になってくると思います。これから益々時間が無くなっていく中で、モチベーションを下げずに実際に最後までプログラムを作りきれるのかもわかりません。

 しかし30年近く追い続けた夢ですし、出来れば寿命の尽きるその日まで、作り続けて行ければ良いなと思っています。
 ツイッターで内藤さん(ハイドライドの作者)のツイートをフォローしていますが、未だにアセンブラに拘って、しかもPC-6001mkⅡ縛りで新たなゲーム開発を趣味で続けておられます。完成しても公開するかどうかはわからないと言うのは豚と同じですし、年齢的には豚よりも遙かに上の方なので、尊敬の念を込めてツイートを拝読しています。その内藤さんが言っておられましたが、「自分のやろうとしている事は、Unityとか使うと一瞬で完成してしまう。それを敢えてアセンブラで実現すると言うのは果たして……?」との事でした。豚も敢えてC++で作らなくてもC#を勉強してUnityを使えば見栄えのする2Dや3Dのゲームは比較的簡単に作れてしまうようです。なので「コツコツとCやC++でコードを書くことに意味はあるんだろうか?」と自問自答しています。でもまぁ「昔取った杵柄」を錆びさせてしまわない様に、腕を磨いているだけだと割り切っています。それに何かC++で大きな物を作って、昔のトラウマを乗り越えようと足掻くためにも。まぁトラウマなんて物は簡単に乗り越えられる物では無く、大抵は自分自身に呑み込まれてしまって自滅してしまう事が多いんですけどね。

 色々と書きましたが、今はドラクエもどきⅢの最初の部屋で必要な機能を列挙することと、予定通りに開発エディタの開発に尽力する方が良いのか、どちらの道を行くべきか迷っています。

-一番偉い人へ、俺たちは今何をするべきか?- byとんねるず

 午後7時09分

大散財、そして遺物発掘。

 今日は朝からKindle書籍を16冊程購入しました。トータルで1万円位になると思います。大東亜戦争や太平洋戦争に関連する書籍をあれこれ見ているうちに、ついつい買いすぎてしまいました。これから読むのが大変です。
 更に1TBのSSDを1個と2.5インチHDD/SSD外付けケースを2台分、カテゴリ7のLANケーブルを2本注文しました。こちらはトータルで1万5千円ほど。今日一日で2万5千円程の大散財をしてしまいました。年金月額の4分の一の出費です。この先が恐ろしいです。

 そして、2013年に6台購入して2年ほど前まで運用していた2TBのNASを、床の上で放置され埃にまみれ、腐海の胞子が大地に根を張りかけて居たところを救出しました。今現在はミニPCにLinuxをインストールして、自分でsambaサーバを立てて6TBのHDDを接続してNAS代わりにしているのですが、使用している6TBのHDDがNAS向けの高耐久性品では無く24時間運用を前提として作られている物では無いので、やはり本物のNASを接続してこちらに運用を移そうと思い、今作業をしています。
 3台ほどNASを復活させれば6TBは賄えるので、残り2台分のLANケーブルを注文しました。しかし幾らギガビット対応だからと言っても、ネットワーク経由での大きなファイルの転送は、かなり時間がかかります。200GB程度のフォルダをサーバからNASに転送するのに、既に30分近く経過していますが未だに5分の一程しか終わっていません。2TB分を転送するには、今夜一晩かかるかも知れません。今流行の10Gビット対応のNASとネットワークアダプタを使えば、今の10分の1になるんでしょうが、まだまだ高価でとても手が出ません。

 後はリビングのミニPCが最近頻繁にフリーズする様になったので、これを引退させて寝室に置いてある別メーカーのミニPC(性能的にはほぼ同じ)をリビングPCとして使うことにしました。
 引退させるミニPCには1TBのSSDが搭載されているので、これを取り外してPS4に移植しようと思っています。
 メインPCのSurface Pro5には1TBのSSDが搭載されていますが、素人では交換不可能なので、アクセス数を少しでも減らすべく外付けSSDに作成中のプログラムなどを置く様にして、コンパイルなどで書き込み回数を本体から外付けSSDにに移す様にします。
 今回購入した1TBのSSDは寝室にあるPS4 Proに搭載して、今搭載している2TB分のSSHD(SSDとHDDの合体したもの)を取り出して、Surface Proに繋げるつもりです。

 今夜と明日はマシン環境の整備に追われそうです。しんどいですが、過去にはサーバがぶっ飛んでから顔面真っ青状態になったことがあるので、動いているうちにバックアップやメンテナンスをしておこうと思いました。電子書籍や動画を見ながらのんびりと作業しようと思います。

 午後3時12分

つくづく向いていない……。

 久々に本格的なコードを書き始めているわけですが、つくづく豚はプログラマに向いていないなと痛感しています。
 まず、納期に迫られて作業すると言うことが出来ません。どの仕事をしていても締め切りと言うものは有りますが、どうしてもプログラマ時代のことが思い出されてしまって自分の中での黒歴史が思い出されます。心血を注いで書いていたプログラムを「よくこれで動いていたな……。もう良いわ、これは○○君に作り直して貰う。」とバッサリ言われて、離婚で散々痛めつけられていた心に、更に鋭利な刃物で切り裂かれてしまって、今に至る鬱病に罹患してしまった事。クビとは言われなかったし、別の仕事を用意していたみたいですが、とてもその場に居続けることが出来なくて、即日退職してしまいました。その仕事が豚にとっての全てだったので、一から作り直すのなら何も引き継ぐことは無かったし、「鬱が良くなるまで休職という方法もあるんやで」とも言われましたが、何一つ成果を出せていない(出せなかった)のに、今まで給料を頂いていた事に対して申し訳なかったと言う気持ちが強かったので、その慰留もはっきり断って辞めてしまいました。
 今思っても「尻尾を巻いて逃げ出した」だけやなと思いますが、プログラムを書く度に当時のことが思い出されて、とても辛いです。また、ゲーム以外にはそれしか趣味が無いのも辛いですね。

 それから、人様に見せられる様な綺麗なコードが書けません。思いつくままに追加と削除を繰り返していくので、出来る頃にはもうグチャグチャ……。これもトラウマに通じるところがあるのですが、プログラムという物は自分だけが分かれば良いと言うものではありません。その点でも豚はプログラマには到底向いているとは思えません。

 過去のトラウマを乗り越えるべく今回プログラミングを再勉強しているわけですが、コードを書けば書くほど落ち込んでしまいます。自己満足のプログラムを書いていて、それで落ち込んでいれば世話はありませんね。

 まぁ、余り落ち込まない程度に、休み休みコードを書いていこうと思います。出来るだけ綺麗なコードを書くことを、心がけつつ……。

 午前4時09分

動作が重い。

 開発中のゲームエディタに簡易的なマップエディタを組み込んでみましたが、16ドットのキャラクタでは小さすぎて作業しにくいので、32ドットに自動拡大して表示する様にしました。ですが、拡大する過程が見えてしまうほどに動作が遅くて、これではエディット時には良いですがゲーム本番ではとても使い物にならないなと言う感じです。
 ハードは2世代前とは言え4コアのCore i7の第7世代のCPUを搭載しており、メインマシンよりも高性能なはずですので、この構成でこの速度ではとても実用的な速度とは言えません。最初から32ドットでキャラを作っていれば、数倍も描画速度は速いです。拡大処理はDirect Xの機能を使っているので、ハードウェアで処理しているはずなのですが……。一度描いてしまうとマップを動かしても描画している様子は見えません。最初にマップチップをマップに配置する瞬間のみ、その様子が見られます。このままスクロールなんかさせたら、エラいことになりそうな感じです。

 今現在はドラクエⅢの出発点の部屋のマップチップのみ作成してありますので、マップエディタを使ってその部屋のみ再現して、実際の動作まで再現してみようと思います。まだ人物のチップを作っていないので、何か適当なチップをあてがう形で、会話のイベントと戸棚を開けるイベント、階段を降りるイベントまでのみ再現してみるつもりです。マルチウィンドウも再現しなければならないので、これにはかなり時間がかかりそうです。

 まぁボチボチ頑張ります。

 午前3時28分

マップエディタ制作開始。

「ドラクエもどき開発用ゲームエディタ」のマップエディタ部分の制作に入りました。
 本当は少しズルをしてVectorで公開されているマップエディタを利用してやろうと思い、色々と触ってみました。しかししっくりくるものが無く、正直言って以前作成した簡易マップエディタの方が性能的に上だったので、結局自分で作成することにしました。(「ロールプレイングゲームプログラミング」の書籍中に、「マップエディタは公開されているものがあるので、利用すると良い」と書いてあったので、「一般公開するくらいだから、どれくらい使い勝手が良いんだろう?」と期待していましたが、どれも自己満足程度で豚にとっては極めて使いにくい物ばかりでした。まぁ豚のエディタも自己満足なので、他の方が使ったら「なんて使いにくいんだろう!」と言われるでしょうけど。)

  取り敢えずキャラクタエディタで、ドラクエⅢのスタート部分(主人公の実家の部屋)のみで完結する物を、勉強を兼ねて作ってみようと思ったので、取り急ぎスタートの部屋で使われているマップチップを全て作りました。
 正直言ってこれくらいのマップなら、テキストエディタで手打ちした方が早いのですが、マップエディタの作成も同時にしていく方が効率的?かなと思って、エディタの作成を始めた次第です。

 テスト用途の簡易バージョンなので、凝った機能は一切つけませんが、取り敢えず最低限のエディット機能を作り込んで、本編のスタート部分だけのゲームの制作に取りかかろうと思っています。使っていて欲しい機能があれば、追々追加していくつもりです。

 来月いっぱいで簡易ゲームだけでも作り込めればなと思っています。まぁ、ボチボチ頑張ります。

 午後6時51分

突然、やる気が失せた。

 今日は午前1時半就寝、午前3時過ぎ起床でした。階下のリビングに降りてきてPCの前に座るも、やる気が失せてしまって何もすることが出来ませんでした。
 昨夜のうちに「ロールプレイングゲームプログラミング」「Professionalゲームプログラミング」の2冊を引っ張り出してきて準備していましたが、プログラムを書く元気も書籍のページを繰る元気も無くて、それどころかPC以外についても何もやる気が起きなくなっています。

 少しの間形を潜めていた鬱の波が、突然大波となって押し寄せてきた感じです。前回の診察時に「動ける様になる処方」として「サインバルタ」という薬を抜いたのですが、動ける様になるどころか関節痛まで酷くなってしまいました。この薬は抗鬱剤と共に関節痛の薬でも有ります。鬱はともかく関節痛にはよく効いていたんだなと実感しました。

 今日は涼しくて起床後に窓を開けて網戸にしていましたが、実家から電話で大説教を食らいました。「平和ボケしすぎている。深夜に窓を開けるなんて常識がなさ過ぎる」との事でした。折角冷房無しで過ごせると思ったのに、結局締め切って冷房をかける羽目になりました。

 それ以降かな、急にゲーム作りも空しくなってしまって、「所詮は自己満足。何の役にも立たないのでは無いか」と言う思いが強くなって、やる気が失せてしまいました。横道に逸れたり足踏みしている暇は無いにもかかわらず……。

 今頃になって眠気が襲ってきました。しんどいけど、今日も一日頑張らなければなりません。大阪府内の生徒・学生も今日から新学期だそう。豚も負けない様に、頑張ろう……。

 午前6時38分

自宅のカワック取り替え工事。

 豚の自宅に取り付けられている大阪ガスの浴室暖房乾燥機「カワック」が、耐久年数を大きく超えて今年で24年目を迎えるので、火災の恐れありとヘーベルハウスからも注意喚起があったので、この度取り替えることにしました。

 後付けのカワックならエアコンみたいな機械なので、取り替えも容易に行えるのですが、豚の家の物は天井埋め込み型なので、工事の規模が大きくなりそうです。今日の午前中に大阪ガスの代理店の人が来て見積もりをしてくれるので、今はその人待ちという感じです。
 実はエネファームも考えたのですが、自宅の電気はeo電気にしているので、何だかややこしい事になりそうなので、今回は見送ることにしました。100万円以上のお金もかかりそうだし、どうしても慎重になってしまいます。

 しかし今回お願いしている代理店さんには、豚は余り良い印象を持っていません。実家のエネファーム化とカワック取り付けで、結構トラブルがあったりアポ無しでいきなり訪ねてきて工事を始めたりと、何かと物議を醸し出しました。
 しかしこの辺りでは一番大きな代理店なので、今後の付き合いも考えてそこにお願いすることにしました。実家はトラブルにも穏便に済ませたようですが、豚は切れやすいので、何かあったら思いっきり文句を言いそうな気がしますが。

 今日の午前9時から12時までの間に訪問という大雑把な予定ですが、果たして何時に来てくれるのか。豚の予定もあるので、余り遅かったら終始不機嫌になりそうです。

 午前9時00分

キャラクタの画像形式。

 先日、友人K氏から「キャラクタの画像形式をビットマップだけでなく、jpegやpng形式にも対応しては?」とのアドバイスを頂きました。確かにその方がデータサイズは格段に小さくなるし、描画速度も速くなるかも知れません。早速対応可能かどうか調べてみました。

 豚はDXライブラリと言うゲーム制作に欠かせない機能ばかり集めたライブラリを使用しているのですが、なるほど確かに画像ファイルの読み込み関数はjpegやpng形式に対応しています。しかし、肝心の画像データの保存関数では、対応しているのはビットマップ形式のみでした。
 Visual C++ 2019の統合開発環境では、カーソルを画像保存の関数に当てると何やらjpegやpngに関する引数も表示されるので、もしかするとこっそりオーバーロードされているのかも知れません。しかし非公開と言うことは使えないと言う事なので、ライブラリの制作者様の対応を待つしかありません。
 別にbmp→pngの変換ツールを制作しても良いのですが、画像フォーマットを解析(或いは公開された物を探して)して、変換するのも面倒です。もしかするとMFCを利用したアプリなら、デバイスコンテキストを呼び出すだけで解決してしまう案件なのかも知れませんが、DXライブラリとMFCは同時に使えませんので、別プロジェクトを作成しての開発となります。

 既成の画像ツールを利用してキャラクタ一つ一つを変換掛けていっても良いのですが、非常に面倒です。
 この件は懸案事項とし、当面はビットマップを採用して制作を進めていこうと思います。

 午前7時38分

モニタが故障。

 Serface Proをメインマシンにする予行演習をしようと思い、Mini DP端子からHDMIに変換するケーブルを使って、リビングPCで使っていた28インチモニタに接続してみました。ところが電源を入れても何も移らないので、手動でDisplayPortからHDMIに変更しようとしましたが、「OSD Locked」と表示され、変更することが出来ません。色々足掻いてみましたが、結局どうにもならなかったので、飯山のサポートに電話して、助けを請いました。
 サポートの方曰く、2つのメディアボタンを長押しすることで解除できるとのこと。試してみましたが全く変わりなし。どうやらロックを解除するにはその方法しか無いらしく、それで無理なら修理扱いになるとのことでした。基板を交換することになるので、安くて15,000円かかると言い、ヘタすると買い換える方が安く付くかも知れませんとの事。仕方が無いのでストックのモニタ(同型機を後2台持っています)と入れ替えて、件のモニタは電源を抜いて長期間放置することにしました。もしかするとメモリ内容がクリアされて、初期化されるかも知れないとサポートの方も言っていましたので。まぁDisplayPort専用モニタにすれば、正常に映るんですが……。

 今は予備のモニタを繋いで、非常に快適に使えています。普段はタブレット、自宅ではメインPCとして使えるSurface Proですが、本体は壊れない様に気をつけて大事に使いたいと思います。

 午後8時28分

 

リビングPC交代へ。

 今リビングで使っているPCは、超小型デスクトップPCで、第三世代Core i5、メモリ16GB、SSD1TBと言う構成ですが、昨年購入して殆ど使っていなかった「Surface Pro5」は、第7世代Core i7、メモリ16GB、SSD1TBと言う構成で、ドラクエベンチマークでも最高画質で「とても快適」と言うスペックのPC(タブレット?)です。もう世代落ちしているとは言え、これだけの高スペックのマシンをモバイル用途と攻略サイト閲覧のみに使うのは、余りにも勿体ないと思います。幸いSurface Pro5やPro6用のUSBハブが多数発売されており、これには外部モニタ端子(HDMI)やギガビットLAN、メモリカードリーダーやUSB端子が搭載されているので、手頃な物を早速注文しました。明日には到着予定なので、リビングPCをSurface Pro5に交代しようと思います。一時、MacBook ProをメインPCにしていた頃がありますが、ああ言う形になります。普段はデスクトップとして、外出時はモバイルPCとして活用できる様になればと思います。まぁ外出なんて滅多にしないでしょうけど……。

 今までは外出時(通院時や実家で長時間過ごす時)には、iPadとKindle閲覧用にFire HD10の2枚持ちで出かけていましたが、これからはSurface Proのみで事足ります。モバイルWifiを使うので通信速度は変わりませんが、画面表示は桁違いに速いです。カバー兼用の専用キーボードもSurface Penも専用マウスも持っているので、マクドでもスタバでもちょっと一服した時に調べ物やコーディングが出来ます。画面もフルHD以上の解像度なので、十分広いです。

 ただ、盗難紛失や落下故障には十分注意しないと駄目ですね。
 しかし、ますますSurface Goの出番がなくなってしまう……。

 午後0時13分