久しぶりにC++でコードを書いています。

 今、「ドラクエもどき制作プロジェクト」に使うためのクラスを書いています。
 久しぶりのプログラムなので、思いも掛けない所で苦戦中です。いやぁ、だいぶ腕が落ちていますね……。数年前ならこんなところで躓かなかったのに、しょーもないケアレスミスでコンパイルエラーの連発。解決するのに数時間を要しました。

 今書いているクラスは「マルチウィンドゥクラス」です。プログラムで枠を描画するのでは無く、キャラクターエディタで作成した枠のパーツを、表示する文字列の長さに応じて自動調整してウィンドゥを作成・描画する方式にしています。
 まぁ仕組みは簡単なので、敢えてここでは詳細は省きます。

 実はこの「マルチウィンドゥクラス」も、以前完成させていました。文字列にルビを振ったり色を変えたり、かんたんなマクロが使えるような物を作成していましたが、以前も書いたとおりサーバの不調に巻き込まれ、綺麗さっぱり無くなってしまいました。

 また、キャラクターエディタも2022年度版を先日まで作成していましたが、これまた綺麗さっぱりぶっ飛び……。透過色の設定まで出来るように拡張していたのに、また作り直しです。と言っても古いバージョンに書き足して作成するだけなのですが。

 介護と用事の合間を縫っての制作なので時間はかかりますが、コツコツとコードを書いていこうと思います。

 こんなプログラムもC#とUnityを使えば楽に書けるのかなぁ……? 未だC#もUnityも未経験なので、想像も付きませんが。
 豚は相変わらずDXライブラリを使用して、コードを書いています。近いうちにC#とPythonに本格的に手を付ける予定なので、そちらの方が良ければ乗り換えようと思います。

コードを書き始めてはみたものの……。

 前回の記事でゲームパッドの入力を司るクラスを書いていると言いましたが、コードを書いている最中で「ほんまにこのクラスは要るんやろうか?」と思い始めました。
 と言うのも、豚は「DXライブラリ」を使わせて頂いてコードを書いているのですが、このライブラリは凄く良くて来ていて、ゲームパッドの状態を知らせてくれる関数もあるので、わざわざクラス化する必要も無いのかなと思いました。
 しかしその度々に関数を直接呼び出すのもスマートでは無いので、マウスの入力も同時に知る事が出来るようにクラスを作っていこうかと思っています。
 まぁマウスの状態を知る関数もDXライブラリには有るので、これもクラス化する必要があるのかと言われれば考えてしまうのですが……。

 何故豚がクラスに拘るのかと言いますと、今回の目標である「ドラクエもどき」を作成するに当たって、クラスライブラリを作成しようと思っています。自分だけのクラスライブラリを作っていれば、次回作を作るときにも便利になりますし、何より自分の思うとおりに動作をデザインする事が出来ます。本来はC/C++の標準ライブラリには無い物で、痒いところに手が届くと言うような関数を作って行くものなのですが、豚は究極の面倒くさがりなので、同じコードを何度も書くのが面倒でクラス化してしまおうと考えているわけです。

 そう言う意味でも今回のようにいきなりコードを書き始めるのは間違いで、クラス分けを終えてから一つ一つクラスを作っていき、最後にメインプログラムを制作するべきです。
 まだ本格的にコードは書き始めていませんので、今からもう一度ゲームの設計を考えるところからやり直そうと思います。

 今回のプロジェクトに使える時間は、各種ツールの制作も含めて2年半。勿論、弟の介護がメインになるのでフルに時間が使えるわけではありませんが、やれる限り頑張ってみようと思います。(鬱の波には勝てませんが……。)

今日はドラクエⅡ発売35周年らしい……。

豚が初めてプレイしたドラクエです。

 豚が初めてプレイしたドラクエは「ドラゴンクエストⅡ」でした。中学生の時だったか、高校に入ってからだったかは憶えていないけど、豚はファミコンを持っていなかったので友人から本体を借りてプレイしたのが最初です。
 その後、MSXでも初愛されているのを店頭で見つけて衝動買い(と言っても当時のお小遣いを使い果たしました)し、試験期間だったにも関わらずのめり込みました。
 ロンダルキアへの洞窟で理不尽な目に遭いながらも何とか洞窟を抜け、一面白銀の世界に出たときには本当に感動しました。それが余りに印象的すぎたので、クリアしたときの事は憶えていません。

 そして時間は流れ高校生になってから、あの名作「ドラゴンクエストⅢ」が発売されました。
 その時は友人が学校を休んでドラクエⅢを買いに出かけていました。皮肉な事にその様子がテレビのニュースで放映されてしまい、翌日学校でこっぴどく怒られていたのを憶えています。
 その時もファミコンを持っていなかった豚は、その友人が攻略してから本体ごと借り受けて、熱心にプレイしていました。
その時から「いつかこのゲームをパソコンに移植してやる!」と思い始め、豚のライフワークである「ドラクエもどき制作プロジェクト」を立ち上げるきっかけになりました。

豚は未だにⅢが最高傑作だと思っています。

 あれから数十年、いつかはやろうと思って居たライフワークですが、豚が社会人をドロップアウトしてから時間を取れるようになり、またコツコツと取り組み始めています。
 高校時代に思い立ってから今はもう50歳になってしまいましたが、豚がこの世を去るまでには何とか形にしたいと思っています。
 本当は「ドラクエⅢ移植プロジェクト」として立ち上げたのですが、「ドラクエⅢ」は色んな新しい技術が詰め込まれており、豚が一人でゲームの分析からドット絵の作成、マップの作成、イベントの作成、それらに伴うモジュールの作成と考えていると、「これはとても無理だぞ」と言う事が見えてきました。
そこで友人の助言もあり、いきなり「ドラクエⅢ」に取り組むのでは無く「ドラクエⅡ」若しくは「ドラクエⅠ」の移植から始めて見る事にしました。
 しかし万一このプロジェクトが成就しても、「ドラゴンクエスト」としてPCで公開する事は出来ません。ありとあらゆる権利関係を侵害する事になりますので、「ドラクエ」と似て非なるもの、即ち「ドラクエもどき」を作る事にしました。
 と言っても公開しないだけで「ドラクエⅠ」又は「ドラクエⅡ」の移植を諦めたわけではありません。
 完全に自己満足になりますが、外部には一切公開しない形で移植をしようと思ってます。
 但し、豚は全く音楽を作る事が出来ませんので、音楽は「すぎやまこういちさんのオーケストラ版」やファミコン音声からそのままお借りしようと思っています。その他のマップチップやキャラクタ等は、レトロフリーク又はエミュレータで画像を撮影して、1ドット1トット独自に作成したオリジナルのキャラクターエディタで再現していくつもりです。
 実は昨年には「ドラクエⅢ」の出発点の街でのスクロールまで、出来るようになっていました。後は足りないキャラクタを作成してマップも作成して、と進めていけるところでしたが、豚の悪い癖でサーバやNAS、それにメインマシンのあちこちに、同じ名前のフォルダやファイルを作っていて、どれが最新の物かわからなくなってしまい、最後はサーバのHDDが吹っ飛ぶという悲惨な目に遭いました。
 結局また一から制作し直して、ついでにそれらを制作するために必要なツールも、始めから書き直す事にしました。
 今はゲームパッドの入力を司るクラスを、C++で書いているところです。

 世の中には強者がいて、ExcelでドラクエⅡを完全再現している人が居たり(これは公開されています。良いのか悪いのかは別にして、完成度は完璧です)、僅か数時間でDOSプロンプト上で動作するテキストキャラクターのみでドラクエⅠを作る人が居たり、みんな凄いなぁと感心しています。
 でも、もしスクエアエニックスが公式に「ドラクエ」シリーズをPCで公開したとしても、豚は自力でコツコツと作っていこうと思っています。

 正直、弟の介護に関わる時間は今後は劇的に増えていくと思います。豚が自分の時間をどの位確保できるかわからないですが、今日から3年以内には何らかの結果を残そうと考えています。

 しかし誰か手伝ってくれないかなぁ……。一人で何から何までやるのは相当キツいです……。これもまぁ自分の夢ですので、他人を巻き込むのは筋が違うかも知れませんね。

三日坊主どころか……。

 年末に「新年から○○をやる!」と色々と目標を挙げましたが、三日坊主どころかまだ全く手を付けてません。
 気が付くと三が日が終わり、既に十四日。間もなく旧正月を迎えようとしています。
 せめて昨年に購入した「黎の軌跡」くらいは最後までやり切ろうと思うのですが、何故かやる気が出ずに1時間も続けられません。

 ドラクエもどき制作プロジェクトも、先ずはジョイカードの入力を管理するクラスを作ろうとしてプロジェクトを作ったのは良いけど、まだ肝心のコードは全く書いていません。
 このままではまたダラダラと一年を過ごしてしまい、年末に後悔する事になるのは目に見えています。

 新年早々「破廉恥で怠惰な豚」になってしまっているので、今日から少しずつでもコードを書いて行こうと思います。

 頑張ろう。

来年の指針。

 ネットの記事で「40代以降の転職」について読んだのですが、やはりこの業界で生きて行くには常に最新の技術を持っておく必要があり、20年も前の教科書に載っているような技術ではとても戦えないとの事でした。
 豚が持ち合わせている技術はC/C++とアセンブラですので、正に20年以上前の教科書で学ぶような技術です。勿論「温故知新」という言葉通り、古の言語を使えるのはプラスだと思います。しかし現在の主流言語(PythonやらC#やらその他Web系の開発言語なども)が使えないようでは全くお話にならないと言うのが現状です。
 そこで来年から2カ年系計画で、豚が学んで行く技術を決めました。
・Python
 この言語は外しようが無い必須言語だと思います。今最も熱い言語で、今後も幅をきかせてゆくだろうと思っています。これはかなり深いところまで学習しようと思います。

・C#
 これは豚のライフワークである「ドラクエもどき開発プロジェクト」の一環で、Unityを使ってみようと思っているのですが、Unityを弄る上で必須言語がC#の様です。
 どちらかと言うと「勉強したい」と言うより「勉強せざるを得ない」と言う感じで、どうしても避けては通れない言語です。

・C/C++
 古の開発言語であるC/C++ですが、まだまだ豚は知らないことが沢山あり、ロジック次第では本当に何でも書けてしまうこの言語を、手放すわけにはいきません。
 また、DXライブラリを使用させて頂く上で、この言語は必須となっているので、腕を鈍らさないためにも引き続き勉強をしていこうと思っています。
 寧ろこの言語が豚にとって主流となると思われます。

・Excel マクロ/VBA
 豚が現役の頃は表計算と言えば「マルチプラン」か「ロータス123」でしたので、恥ずかしながらExcelは未だかつて触ったことがありません。
 簡単な表計算さえ出来ないので、一般知識程度には触れるようになっておこうと思います。
 豚はOffce365に加入しているので、使わなければ勿体ないです。
 取り敢えずの目標は、今手入力で作成している「弟の発作発生リスト」をExcelで簡単に見やすく表にまとめる事です。
 療育センターの主治医に提出する物なので、見やすい一覧を作りたいです。

・Access マクロ/VBA
 これはExcelにも共通することなのですが、「弟の発作発生リスト」をExcelから引っ張ってきてデータベース化するのを目標としています。
 Accessはかなり古いバージョンになりますが、プログラマ時代にVBAでアプリを書いていましたので、基礎の基礎は把握しているつもりです。
 しかし近代のバージョンにあるような機能などは全く把握すらして居らず、一からの勉強をすることにしました。
 豚にとってはリレーションシップを張ったりするよりもSQLで書いてしまった方が早いのですが、また力業になってしまって全然スマートでは無いデータベースになってしまうので、標準のAccessを使ってデータベースを作ったり操作したり出来るようになりたいと思います。

 他にも時間があればWordも弄れるようになってみたいし、Javaも触れるようになっておきたいのですが、2年間に学ぶことが多すぎるので、あくまでも時間があれば勉強したい科目として上げておきたいと思います。
 豚はWordも全く触れないので、基本的な書類作成ぐらいは出来るようになっておきたいとは思うのですが。豚の現役時代は、ワープロと言えば「一太郎」の時代でしたので、DOSベースでの一太郎なら多少は触れます。しかしWindows化されてからは機能が多すぎて豚には付いていけなくなってしまいました。
 しかし高校生ですら学校で習うツールなので、「Word」「Excel」「Access」「Power Point」位は自由に使いたいなぁと思ってもいます。まぁ時間があればですが。

 以上、令和4年と令和5年の2年間に渡って身につけたい最低限のスキルを挙げましたが、勿論中心は弟の介護です。介護生活を送りつつ時間を見つけてスキルアップをしていきたいと思います。
 さて52歳の豚は笑っているでしょうか? それとも挫折に涙しているでしょうか?
 それは50歳の今をどう生きるかにかかってきていると思うので、もうこれ以上時間を無駄にすることなくスキルアップに励むつもりです。

 しかしこれだけのスキルを、いま流行りのネットスクール(とでも言うのでしょうか、ネット上で勉強できる専門学校の様なもので、教科ごとに購入することができる様です)で学ぶとすると軽く百万円はぶんどられてしまうので、地道に書籍を参考に勉強するしかないですね……。

「ナビつき! つくってわかる はじめてゲームプログラミング」

 今朝、ニンテンドースイッチ用ソフトの「ナビ付き! つくってわかる はじめてゲームプログラミング」が届きました。
 正直なところ予約していたのはすっかり忘れていたので、「何が届いたんかな?」と思っていました。
 まだパッケージを開封すらしていないので、また時間のあるときにでもゆっくりと勉強してみようと思います。

 今日は朝からあちこち自転車で走り回っていましたので、無茶苦茶疲れました。先ず朝一に近鉄長瀬駅近くにある喫茶店へ、レトルトカレー(弟の分)を買いに行き、帰宅後に少し休憩した後、午後一に精神障害者手帳の更新が出来上がったという通知を貰っていたので、近鉄河内永和駅近辺にある西保健所へ、更新された手帳を受け取りに行ってきました。
 その帰りには関西スーパーで弟の飲用のペットボトルの水を一ケース購入。帰宅後にその足で近所のライフへ出かけ、頼まれていた買い物をし、更に帰宅後にJR長瀬駅前にあるジャパンに炭酸水とロキソニンSを購入しに行ってきました。
 全ての買い物や用事が終わったのは、午後4時半過ぎでした。
 豚は普段から余り外出はしないので、これだけの用事をこなすだけで精神的にも肉体的にもクタクタになってしまいました。

 そんな感じなので、今から届いたスイッチのプログラミング教材を開封する気力も無く、後日に先送りしたというわけです。もし天気予報が当たれば、明日は雨模様との事なので、豚は外出せずに済みます。ちょっとだけ自由な時間も増えそうなので、もし気が向けば明日にでもプログラミング教材を開封して、遊んでみるかも知れません。

 このプログラミング教材は、ツイッターでは「現代のファミリーBASICだ」と言われていましたが、あちらはもっとゴリゴリとコードを書く必要があったように思います。
今回の物は「ビジュアルプログラミング」とでも言うべき物で、どちらかというと「スクラッチ」に似て居るように感じました。あくまでもパッケージを見ただけの印象ですが……。実際はもっと複雑で高度な物かも知れませんが……。
 どっちにせよロジック(アルゴリズム)を学ぶには、とても良さそうな感じです。豚個人的にはコードをゴリゴリ書く方が楽しいし、自分で0から作り上げるので構造の把握がしやすくて勉強になると思いますが、スイッチは「全年齢層」対象なので、小さな子供でもゲームを作りながら論理的思考を鍛える事が出来そうなので、今から全く前知識無くプログラミングを始める人にはすんなり受け入れられるんだと思います。

 豚はRPGツクールも最新版は購入するくせに、全くと言って良いほど起動すらせず、キャラクタエディタからマップエディタ、スムーズスクロールやマルチウィンドウ等のモジュールを自力で作っています。勿論豚以外のが使う事を一切考慮していないので、最低限のメニューしか作らずに機能を極限まで制限しています。人が使ったらとても使いにくいツールやモジュールですが、自分で0からコードを書いているので、必要な機能は適宜追加していけますし、豚にとっては使いやすいツールとなっています。
 今の所はこれらのツールやモジュールはC++で書いているのですが、今後はC#やUnityを使って書いていきたいなと思っています。

 しかし、今日の所はゆっくりとDS版ドラクエ5の続きでもしようかと思って居ます。

やっぱりエミュ環境を……。

 ドラクエもどきを作成するに当たって、今まではキャラクタのドット絵を見るためにレトロフリークとUSBのHDMIキャプチャを繋いで、レトロフリークの画面をOBSでデスクトップに表示させていました。
 しかし遅延が酷くて、ゲームパッドからの入力が画面に反映されるまで一呼吸遅れるので、操作がしづらくストレスが溜まっていました。

 結局Windows用のファミコンエミュをPCにインストールし、PC上で全て完結するように環境を変えました。それは良いのですが、レトロフリークのようにチートコードを当てようと思ったら、ちょっと手間がかかりそうです。
 チーとしないで自力でレベルアップしていけば良いのですが、データを取るだけが目的のプレイなので、出来るだけ戦闘などは避けたいのです。やっぱりチートコードを探して、適用させるしか無いんでしょうね……。

 PC上で作業が完結できる事から、画面のキャプチャなどは楽になりました。マップチップのドット絵と会話データを収集しようと思っています。チートデータが無いとレベル上げながらだから、かなりしんどい作業になりそうだな……。

RPGツクールMZを購入。

 SteamでRPGツクールMZを購入しました。前バージョンのRPGツクールMVも一度も使わないまま最新バージョンを購入した事になります。
 豚は自分でキャラクタエディタとマップエディタを作った(まだまだ未完ですが)ので、それを使ってゲームを作ろうとしているので、ツクールを使う機会はありませんでした。
 ツクールを使うとプログラミングのスキルが上がらないので、出来るだけ自力で作ろうと足掻いていたのですが、それはあくまでもドラクエもどきを作る為であり、豚オリジナルのRPGはツクールを使っても良いと考えています。ツクールもマニュアルが全てヘルプ形式なので、中々面倒くさい様ですが、一通りのツールは揃っているようなので、手軽に作成出来そうです、最もゲーム制作のセンスがあればの話ですが……。

 折角RPGツクールMZをを購入しましたが、あくまでも豚はC++とDXライブラリを用いた自力プログラミングに拘りたいと思っています。豚のゲーム作成の手法は31年前に高校のコンピュータ部で恩師である桑原先生に教わった手法をそのまま利用しているので、今時のゲーム作成方法にはそぐわないかも知れません。今はC#とUnityで簡単にゲームが作れてしまうみたいですし、自力でゴリゴリとコードを書くには時代遅れかも知れません。でも豚は古風な手法をとりたいと思っています。30年前はソフトハウスでもこの手法がとられていましたし、自力で一つくらいは作品を作りたいと思っています。プログラマ時代に4年かかってたった一つの作品さえ満足に作れなかった奴が何を言ってるんだと思われると思いますが、そのトラウマを乗り切るための修行だと思っています。

 なんだかんだ言って、結局今日はPS5を起動しませんでした。やっぱりプログラミングが最高のゲームだと思うし、あれだけプライドがズタズタに切り裂かれても、未だにプログラミングが楽しいと思えるので、好奇心が続く限りコードを書いていこうと思います。
 まぁ多分RPGツクールMZツクールを使っても、スクリプトの類いを書かないといけないと思うので、どっちもどっちという感じもしますが……。

 C#とPythonを勉強しつつ、従来のC++でコードを書いていこうと思います。

一区切り。

 今日は鏡開きの日で、新年の行事も一区切りです。昔は15日に開催されていた成人式も法律で変更され、コロナウィルス感染に気を遣いながらも公の成人式が開催されている地方自治体も多いと聞きます。

 豚が在住している東大阪市も、花園ラグビー場で蜜を避けて開催されたとの事。屋外での開催は寒かったやろうなぁ~と思います。
 豚のが成人した29年前には、近畿大学の講堂を借りて開催されました。記念品は500円の図書券。久しぶりに同級生に会った以外は楽しくも何も無い祭典でした。

 さて、これから大学受験を控えている人にとっては、これからますます厳しい状況になっていきます。初めての共通テストを受験し、勝ち抜いた人は更に2次テスト。学校にも寄るけど、遅い人は2月の頭くらいまで受験戦争を戦い続けなければなりません。

 豚は彼ら受験生を応援することしか出来ませんが、その頑張りにあやかって豚もプログラムを書き始めることにしました。昨年はまともにコードを書いていなくて、ドラクエ専用に特化したキャラクタエディタは「令和元年」とバージョン情報に書いてありました。今年はC#やPythonに手を出す予定ですが、取り敢えず最低限の機能を持たせた「ドラクエ専用キャラクタエディタ」と「同専用マップエディタ」を使って、ドラクエⅡの世界をPC上に再現する事に再チャレンジします。言語は使い慣れたC/C++(本当はアセンブラの方が長いのですが、今一人でやるとなると多分気が狂いますので……)、最低限の全世界移動(戦闘無し、会話なしのマップの移動に関するイベントだけを組み込んだバージョン)を今年中に何とか実装できればなと思っています。勿論公開することは出来ませんので、実装過程などは豚の工房の方に書いて行くと思います。
 キャラクタやマップチップをレトロフリークで動かしながら同一画面で拡大しながら1ドットずつRGB値を取得しながら打ち込んでいくという気のとくなるような作業が待っています。過去に何度か画面スクロールまでは作ったけど、このキャラクタの移植作業でうんざりしてしまい、投げ出してしまっています。
 まぁ「ライフワーク」と宣言した以上は泣き言は言えませんが、完成しても友人や知人に見せるだけしかできないというのが辛いですね。
 既に何人もの人が「Excelでドラクエを再現」とか「テキスト文字だけでドラクエを再現」という事をされていますが、豚は地道にゴリゴリとコードを書いていこうと思います。

 高校生当時にゲームを作っていた仲間は3人。豚と、今は仕事が忙しくてそれどころでは無いPちゃん、そして早くして世を去ってしまったS村氏。それに我々を導いて下さった桑原聡一郎先生。先生は当時30歳だったので、今年で定年を迎えられるはず。約30年がかりで未だ一つの作品も完成させた事が無い出来悪い豚だけが、諦め悪く挫折しながらも未だ夢を見続けています。

 長きにわたり鬱病とも闘い続けていますが、「With コロナ」ならぬ「With 鬱」で生きていくしか無いので、ボチボチ頑張ります。今後はますます介護で自分の時間は確保できないでしょうし……。

 

最近のメルカリは……。

 以前は「フリマアプリ」の名の通り、出品者と購入者のメッセージのやり取りが頻繁に有って、お互い納得ずくで購入したり価格の交渉をしたりしていましたが、最近はヤフオクの即決商品と同じで購入したら今度は挨拶も何も無しでいきなり発送、そして届いたら評価と言うような感じで、とても味気ない感じになっています。
 勿論出品者によってはやり取りを密にしてくれる人も居るし、そう言ったやり取りが苦手な人も居るんだとは思いますが、そう言った人はフリマアプリよりもヤフオクを利用すべきだと思うのですが……。勿論ヤフオクも一昔前までは落札したら挨拶から入って言葉でやり取りしながら取引を進めたものですが、今ではすっかり固定メッセージやメッセージのやり取り自体をする事が殆ど無くなってしまいました。
 何だか味気ない感じがするのは豚だけでしょうか。

 さて今豚は蔵書の中から「14歳からはじめるC言語わくわくゲームプログラミング教室」と言う書籍を読みながら、C言語の復習とDXライブラリを用いたゲームプログラミングの基礎を勉強しています。
 今回の目的は2Dマップのスクロール処理を学ぶことです。以前作りかけていたドラクエもどきでは、一度マップを描画した後1枚のビットマップの絵として保存し、それを1ドットずらして再描画すると言う非常に無駄なことをしていました。DXライブラリを用いてスクロールするにはどうやれば良いのかわからなかったので、今回はそれを身につけようとの魂胆です。だから導入部のC言語の解説は殆ど流し読みで、サクサク先に進んでいます。
 アセンブラで書いていたときや、C言語でもVRAMに直接描画していたときは、空きメモリにマップを描画しておいてスクロールした分をVRAMに転送してくると言う手法で高速スクロールが可能でした。でも今回はVRAM云々と言う概念そのものがありませんので、どうやるのかが非常に気になります。裏画面に描画しておいてそれを転送するのか……。それ位しか豚の拙い知識では思いつきませんでした。

 しかし、一昨日・昨日と殆ど眠っていないので、とてもしんどいです。今夜も眠れないと三日連続寝ていないことになります。今夜こそは薬の力を借りてでも、睡眠を取ろうと思っていますので、勉強はそこそこにしておこうと思います。

 午後10時39分