跡形もなかった……。

 キャラクタエディタ、マップエディタ共に最新バージョンは跡形もありませんでした。豚は思いつきでマシンの構成を変えたりするので、どのHDDに何が入っているのかを確認せずに使い回したりします。悪い癖なのですが、それが仇になりました。

 仕方が無いので、これからキャラクタエディタとマップエディタを作ろうと思います。今まで通りDXライブラリを使って書くか、それともWindowsネイティブのアプリで作成するかはこれから決めますが、後者の場合は豚のトラウマであるWindowsアプリの作成をマスターしなくてはなりません。DXライブラリを使って書く場合もWindowsアプリではあるのですが、どちらかというとコンソールアプリに近い書き方なので、全く別物になります。

 これを機に22年前に味わったトラウマを乗り越えるべく、VisualC++によるWindowsアプリの作成をマスターするのも良いかもしれません。一応入門書も購入済みなのですが、まだ届いたままの状態で開梱もしていません。Windows APIとMFCの勉強もしなくては。(まぁリファレンスがあれば何とかなるんですが。)

 ハイドライドの作者、内藤さんに倣ってC#で書いてみるのも良いかもしれません。豚にとってはC#は全く未知の言語なので、少しは楽しめるかもしれません。Unityも使えるようになるので、コードの書き方によってはクオリティの高いものができるかも知れません。

 まぁ先に基本であるVisualC++でWindowsアプリを書くところからですね。早速書籍を読んで、入門から始めて見ます。

 午前11時47分

ドラクエもどきの進捗状況。

 ドラクエもどき、どうやら最後にコードを書いたのが去年の9月らしく、ドラクエⅢのスタート画面(勇者の家の2階)の表示で止まっているようでした。
 しかもキャラクタエディタやマップエディタは、キャラクタサイズの変更により作り直しの真っ最中で放置しており、最新の物は行方不明という状態です。
 以前のミニPCに内蔵していたSSDに保存していたのかも知れませんが、マシンの変更やなんやで、誤って消してしまった可能性があります。

 キャラクタエディタとマップエディタの両方を再度作成するとなると、かなり時間もかかりそうですし面倒くさいですね……。しかし止めてしまうとライフワークを投げ出すことになり、今まで掛けてきた時間が全て無駄になりますし、悩むところです。

 念のため寝室専用のSurface Proを調べてみて、無ければまた考えます。

 午前11時24分

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

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

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

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

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

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

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

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

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

 午後7時09分

動作が重い。

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

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

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

 午前3時28分

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

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

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

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

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

 午後6時51分

キャラクタの画像形式。

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

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

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

 午前7時38分

キャラクタエディタ部分、完成!

 昨日の段階でゲームエディタにキャラクタエディタ部分の組み込みは終わったと書きましたが、今日一日かけてデバッグと機能の追加を行い、Version 1.00版が完成しました。
 透過色の設定も出来る様になり、基本的なキャラクタはエディット出来るのではないかと思います。
 ただ、エディットサイズはFC版のドラクエⅢを参考にしているので、16ドット×16ドット固定になっています。これは簡単に増減することは可能ですが、それを許すとマップエディタやモンスターエディタとの連携が難しくなるので、今回は固定と致しました。
 また色パレットには256色しか表示していませんが、実際のドラクエで使用されている色をRGB値で直接設定することで、全く同じ色でエディットする事が出来ます。これはエミュレータやレトロフリークで実画面をPNG形式でスキャンし、PC上でペイントのスポイト機能で実RGB値を見ることが出来ますので、こまめにコツコツと作業するしか有りません。人物など動きのあるものは、解析ツールでパターンを表示して(これが単色でしか表示されない)、色は実際に使われている色で一人一人エディットしていくしか方法は思い浮かびません。

 プログラムも大変ですが、その次に大変なのがこのキャラクタの作成だと思います。実際にドラクエⅢでは何パターンのキャラクタが使われているのか資料がありませんので、実マップを移動しながら未作成のキャラクタを拾って行き、一つずつ潰していくしか有りませんね。
 今作成しているゲームエディタはドラクエⅠ~Ⅲまで作成出来る仕様ですので、取り敢えず最もキャラクタ数の少ないドラクエⅠをターゲットにしても良いかも知れません。一人でキャラクタデータの作成は、かなりしんどいですからね。

 午後7時43分

cedit2019組み込み完了。

 「ドラクエもどき開発用ゲームエディタ」に、既に開発してあったキャラクタエディタ「cedit2019」に改良を加えた物を搭載しました。VC++ 2019ではかなりコンパイルが厳しくなっていて、いい加減なコードはどんどん弾かれてエラーになる様になっていました。豚もVC++ 2018でエラー無くコンパイルが通っていたコードに幾つものエラーが表示され、手直しに手間取りました。

 キャラクタエディタ部分は動作する様になったのですが、これからマップエディタやモンスターエディタと相互にデータをやり取りする仕組みを作らなければなりません。後は透明色をカラーコード何番に決めるかとか、検討すべき点は山ほど有ります。コードのスリム化も図らなければなりません。この後が大事なんですよね……。

 午後8時16分

 

こんな、夢を見た……。

 今日はあさから予定していたことの出鼻を挫かれて、仕方なく自宅で久しぶりのビールを少し飲んで、不貞寝をしていました。いつもながらに夢を見たのですが、今日は今までの人生で一番楽しかった時間の夢を見ました。

 舞台は豚が高校3年の夏、学校のコンピュータルームにて幕が上がりました。
 そうです。コンピュータ部の部活動の夢です。当時は桑原先生の陣頭指揮の下に「画面切り替え式RPG」(当時はハイドライド形式と呼んでいました。スクロールは文化祭終了後に実現。)である「ハスターの愛情物語」(後に「ハスターの冒険」と改題。P氏原作です)を文化祭までの短い残り時間と闘いながら、必死にプログラムを書いていた頃の夢です。
 詳細は記しませんが、とても充実した、それでいて温かい夢でした。目覚めるのが惜しいと言うのはこう言う事でしょうね。楽しい時間はあっという間に過ぎ去って、また現実に戻ってきました。(夢の内容は秘密です。)

 何故こんな夢を今更見たのかですが、昨日より制作を始めた「ドラクエもどき開発用ゲームエディタ」のせいなんじゃないかと思います。構想では今まで別々に作っていた「キャラクターエディタ」「マップエディタ」「モンスターエディタ」を一つのツールにまとめ、各エディタ間のデータの行き来を可能にする予定です。開発言語はC++&DXライブラリ、プラットホームは当初はWindows10、後にMacOSXにも対応予定です。DXライブラリが公式にMacOSXに対応した事により可能になりました。
 キャラクターエディタは以前に作った「cedit2018」を取り込む形で、機能の追加と最適化を行います。マップエディタとモンスターエディタは新たに開発します。それらを1つのツールにまとめて、データ管理を簡単にします。完成後には「イベントエディタ」も統合して、座標情報と簡単なスクリプトを吐き出せる様に出来ればと思っています。

 高校時代には「キャラクターエディタ」「マップエディタ」「モンスターエディタ」までは制作できましたが、イベントエディタまでは手が回らずに、力業でマップにイベントを埋め込みました。今回は視覚的に(どういう方法かはまだ考えていません)イベントを作成出来ればと思っています。簡単なスクリプトの解析エンジンは実験的に作ってみましたが、今の所は成功しています。もっと精度を上げなければ、実用化は出来ませんが……。

 桑原先生に叩き込まれた手法は、ぼんやりとでは有りますが頭の中にあります。資料は一切合切紛失してしまいましたが、記憶をたどって何とか再現したいと思っています。この手法はファミコン時代のドラクエ型RPGにのみ通用する方法で、現在のRPGには全く通用しません。それに当時はBASIC+アセンブリ言語(マシン語)で制作していましたが、今回はC++オンリーなので実コードは全く参考になりません。一からのオリジナル開発です。

 以上のツールを「脱高校生三十周年記念」に当たる今年から、制作を始めようと思い立ちました。締め切りは2020年7月。一年有りませんが、何とか形にしたいと思っています。

 鬱病と闘いながら、弟の介護の片手間に、他言語の勉強をしながら一人で開発するので、ここまでが精一杯だと思います。また、途中でツールの参考にするために「RPGツクール」で簡単な作品を作ってみようとも思っています。形になるかは分かりませんが……。

 しかし三十年間もドラクエ型RPG制作の夢に取り憑かれるって、はっきり言って馬鹿以外の何者でもありませんね。他の友人たちはもっと先に行ってしまったのに、豚はいつまでも同じところで足踏みしています。あばれはっちゃくの父ちゃんが居たら「父ちゃん、お前の馬鹿さ加減に涙が出てくらぁ!」と張り倒されそうですね。

 三十年越しの夢、「そして伝説へ……」となりたいものです。

 午後1時40分