日記(84)

<前 次>

ふにゃ1


ステージ読み込みができるようになって、昔の動きがかなり再現できてきました。

昨日作っていた画面サイズ設定機能が完成しました。
小さくしたらこれ。
大きくしたらこれ。
最初に実装したウィンドウサイズ自動調整機能と正反対の機能なので、ちょっと時間がかかってました。

これ、バージョン1.0で廃止したんですが、実は実装だけ残っていたので、これも移植しました。
この演出が出るステージは、今のところ存在しません。

VB版ではメッセージはモーダルダイアログで表示していたため、閉じるまでメニュー操作ができませんでした。
それを再現するため、同一ウィンドウでモードレスになったC#版でもメニューを使用不可にしていました。
しかし、冷静に考えて、メニューが使えないのは不便でしかなかったので、バグらないように調整して、メニュー解禁しました。

ステージ読み込みのための一番大変な機能、ファイル読み込みを移植しました。
VB6のファイル読み込みは非常に癖があり、コンマと改行を区別しなかったり、読込先の変数の型によって処理が違ったりしてたんですよね。
完全ではないですが、再現しました。
本当はテキスト内のコンマとか引用符の挙動とかがさらに厄介なんですが、そこは妥協しています。

そして、ついにファイル読み込みができました!
実は画像が一部欠けたりして微妙な部分もあるのですが、とりあえず今までに作ったステージも大部分遊べます!

あとは、セーブデータ関連と秘密機能関連と、ヘルプも時代に合わせて作り直しかな。

アンパンマンDBとTGWSAdminとふにゃ1

アンパンマンDB(記事更新)

来週の放送情報。
ガレットさんは新キャラですね。
クレープの亜種みたいな感じ?折り畳みがポイント?

TGWSAdmin

いつも記入している定型データの記入が簡単になるようにテンプレート機能を追加。
簡単に実装できる割りに効果高いんだからもっと早く作っときゃよかった。

ふにゃ1

昨今の高解像度環境対応のため、画面サイズ変更機能を実装中。
実はふにゃさんでもやろうとしたことがあったんですが、あの時は頓挫してたんですよね。
今回はWPFなんで拡大縮小処理はフレーム側にお任せで楽ちんです。
まあ、今は画面写真を出せないぐらい挙動が変なんですがね。

GitHub Copilotとふにゃ1とFamiTracker

GitHub Copilot

Announcing GitHub Copilot Free - GitHub Changelog
なんか無料枠ができてました。
以前からちょいちょいお試しで触ってはいたんだけど、本格的に使い始めてもよさそう。
まあ、あまり本格的過ぎると無料枠の限度に達してしまうかと思いますが。

ふにゃ1

今回はスクショなし。

この辺はバグ修正。
カウントダウンのほうは、メッセージ表示にダイアログボックスを使わなくなったことで発生した初期化漏れ。
キー入力のほうは、リセットのコードが解析で出てこなかったので、原作でももしかしたら発生していたかもしれません。

これは単にコードを移植しただけ。
先ほどのGitHub Copilotに一度書かせてから、手直しして作ったものです。
コミットメッセージは、全面的にGitHub Copilotに任せました。
基本的に全面的に信用してプログラミングを任せるのはありえないですが、修正する前提で案を出してもらうとか、少し変でも害の少ないコミットメッセージあたりに使うのがよさそうかな。

ここはメニューの機能の実装だけで、実際の読み込み処理はまだ作っていません。

FamiTracker

ふにゃ1にはもともとBGMはついていなくて、プレイヤーが好きな音楽をかけられるだけでした。
せっかくの移植だしここらで標準のBGMでも作ってみようかと思って思い出したのがこれ。

FamiTracker
ファミコン音源で音楽作れるやつです。
単に音がファミコンっぽいってわけではなく、しっかり制限事項も含めてファミコンの仕様で音が鳴ります。
前回使ったのが2008年だから、16年ぶりか…。

ふにゃ1と浮き沈みランチャー

ふにゃ1


ステージクリアとゲームオーバーができた!!

食べ物取得処理…と、やられ判定も実はここ。

メッセージやらマウスカーソルやらでとかく隠れがちなふにゃの顔を何とか見せようとする修正です。

全クリの演出はVB版から仕様変更しています。
秘密機能を解放しても終了しない、複数の条件を満たしたら連続で取得可能、といったあたり。
あと、メッセージ表示が実質非同期になった関係で、内部的な処理の流れも変更しています。

これは単なる便利メソッド。

やられた時の演出。
ゲームオーバーも作っていますが、コンティニューの処理はまだテストできていません。

浮き沈みランチャー

昔立てた課題の内容を忘れてしまったので思い出そうとしているところ。

ふにゃ1


だいぶ動くようになってきました。
バナナ取得とミスを作ればとりあえずゲームとしては成立するようになります。

キー押しっぱなし暴走モードを止める、キー離す処理。

この辺は動作に係わらない微妙な修正です。

昨日の状態で床をすり抜けていたのは、移植の際に動く方向を間違えて設定していたことによるバグでした。

WPF標準のタイマーだと動きががたがただ立ったので、funyakプロジェクトからタイマー処理を移植してきました。
まさかエターナってたfunyakが役に立つ時が来るとは!

地形との当たり判定。
これでとりあえず不自由なく走り回れるようになったわけです。

事あるごとに出てくるメッセージボックスも実装しました。
もともとはダイアログボックスで表示していたのですが、タイマー処理中にダイアログボックスで処理を止めてしまうとまずかったのと、ダイアログボックスを閉じると元のウィンドウが別のウィンドウの後ろに回り込んでしまうという謎現象があったので、同じウィンドウ内に普通のボタンとして表示することにしました。
ついでに、コンティニュー演出時のキャンセル機能を独立したボタンにしたり、補足説明を右下に表示できるようにもしました。
秘密機能とか、もともとは番号しか表示されなくて、何の機能が解放されたかわかんなかったですからね。

ふにゃ1

ついに操作できるようになりました。
ボタン離したのを感知しないので走ったら走りっぱなしだし、足元の当たり判定がなんかおかしいようで、走った瞬間地面を貫通して落ち始めますが。
ここはコードのベタ移植じゃなくてちゃんと意味を把握して書き直さないといけなさそうですね。

あとは、今盛り込んでいる変更点をREADMEに追記しました。
リリース時に忘れちゃいそうだし。

ふにゃ1

ついに「動く」ようになりました。

画像読み込みに関しては、今日になってからStream経由で読み込む方法が分かったので、リソース→Stream→BitmapSource→Imageコントロールの経路で読み込むようにしました。
んで、いい感じに方法が確立できたので、マップ背景だけでなく、その他もろもろの画像も読み込むようにしました。
参考にしたのは以下のサイトなど。
アプリケーションのリソース ファイル、コンテンツ ファイル、およびデータ ファイル - WPF .NET Framework | Microsoft Learn
c# - IO.Stream to Image in WPF - Stack Overflow

MoveCharaとMainLoopがこの作品のゲームとしての中枢です。
もともとMainLoop関数はなくて、タイマーコントロールのイベント内に直接書いていたのですが、移植に当たって、ゲームのロジックの大部分が書いてあるCleater内に移しました。
ちなみにCleaterってモジュール名は、何かを生成することを意図してCreatorと書こうとして誤字ったんだと思われます。
もはや生成どころではない何でも屋になっているので、スペル修正はしていません。

ゲームの中枢はできたって言ったけど、操作受付はまだないので、落ちるだけです。
当たり判定もないので、床の下まで落ちていきます。
今後はそのあたりを重点的にですね。

<前 次>