日記(83)

<前 次>

ふにゃ1(開発状況)


バージョン情報ダイアログも作って、本体の完成は残すところヘルプのみ。
こっから先は、各コミットに関するコメントを、昨日書けなかった分も含め、順不同で。

秘密機能のスピードオプションはVB版では2倍速と1/2倍速に変更できましたが、これに加え、10倍速と1/10倍速も選べるようにしました。
これは本来funyak向けに考えていた機能で、アクションが難しい部分ではスローにしたり、待つ必要がある部分で倍速にしたり、というのを想定したものです。
こういったピンポイント利用をしやすくするため、スピード変更機能にショートカットキーも追加しました。
激しく非推奨ですが、設定ファイルを直接いじると、50倍速までは出せます。

コミット履歴からもわかるように、WPFでは、キーボードショートカットとメニューに表記されているショートカットっぽいテキストは別物です。
ショートカットキーさえ知っていれば、未解禁のメニューも実質押せるってわけです。
なので、解禁前は、実行しようとしても無視するようにしました。

ふにゃが寝ます!
寝てるとかわいいので、WPF版に移植するとしても、絶対にここは外してはいけないのです!!

メッセージ表示をモードレスにした都合上、最初のタイトル表記の時点から「自爆」メニューが使えるようになってしまったので、それに対するピンポイント対応です。
自爆できないようにするというのも選択肢ではあったのですが、ここはなんかできるようにしときたいと思ったので。

今回WPFを使って実装を進めているわけですが、別にWPFに詳しいわけでも得意なわけでもなく、DataContextの設定の仕方すら満足に知らなかったのです。
開発を手っ取り早く済ませたい都合上、これまでも「WPFの機能をちゃんと知っていればもっと簡潔に書けるのに」と思ったことは何度もありましたし、これからも何度もあるでしょう。
今回のDataContextの件は、無事知ることができたので簡潔に書けた例です。
ま、まあ、コードビハインドの1行がXAMLの1行になっただけなので、行数的には変わってないんですけどね。
XAML上で候補が出るようになったのはうれしい。

ふにゃのバナナ数のカンストは現在5000ですが、もっとカンストらしく9999とかにしたいなーとか思って、その準備段階として、定数で書くようにしました。
なお、秘密機能の条件のほうは、要求数据え置きです。

昨日めちゃくちゃ頑張ってたのがここ。
今どきの言い方をするなら、実績とかアチーブメントとかいうやつですね。
VB版ではふにゃの顔をダブルクリックすると、殺風景なメッセージボックスに何の説明もなく数字とtrue/Falseが並べて表示されましたが、これをもっとわかるようにしたのがWPF版でのこの変更です。
取ったバナナの数をわかりやすく表記し、秘密機能もどれがどれかわかるように表示します。
あと、今更条件を隠す意味もないと思ったので、画面上に条件も表示するようにしました。

前後しますが、プレイ記録画面実装に合わせるため、秘密機能が出てきたときのテキストも変更しました。
名前とは別にプレイ記録画面で説明も出るようにしたので、名前としては簡潔なものにしました。
一応統一感を意識して、簡潔な英単語1語にしています。

サンプル画像を使うステージと、画像が無くなってた時のフォールバック対応。
指定された画像がないときは、サンプルステージ用の画像を使うようにしました。

ステージファイルを開くメニューから選択するのが面倒ってときに、エクスプローラーからドラッグ&ドロップできると嬉しいなってことで。
こういうのってビジネスソフト向けの機能な気もしますが、WPFがそもそもゲームよりビジネス用途向けの技術なんで、こういうのをするのは簡単なんですよね。

Cleaterがロジック全部込みの、いわゆる“神クラス”(参考)になっていて、機能調整しにくい状態になっていたので、分離して使いやすくしました。
本当はステージデータ関連を分離したかったのですが、ステージデータ関連はあらゆる機能に密蜜の密に密結合していて、分離しようとするとかなり大変なロジックの修正が必要になってしまったので、逆に考えてステージデータ無関係な部分をきりのいい単位で分離しました。

ステージデータ関連の処理を分離したかった理由がこれ。
GitHub Copilotが書いたコミットメッセージからは何も意図が伝わってきませんが、ステージデータの読み込みに失敗したときにバグらないようにする対応です。
読み込み途中は、ステージデータを持っているCleaterオブジェクトをもう一つ用意しておいて、読み込み成功したときだけ、ゲーム画面が持っているCleaterオブジェクト本体と置き換えるようにしています。
こうしたことで、失敗したときに、途中まで読み込んだデータで画面上のステージが書き換えられてしまうことがなく、壊れたデータを開いてしまったときにも安全になったのです。

これは共通処理の切り出し。

ふにゃのモーションがランダムに流れるバージョン情報も再現しました。
今のところ、実行ファイルのプロパティで見られるバージョンと自動連動する機能はありませんが、それも開発中です。
Windows Formsと同じ方法だとエラーが出たんですよね…。

日記に書くほどのものでもなさそうだけど、一応書いたので。

ドラゴンクエスト10とふにゃ1

ドラゴンクエスト10(おきがえリポちゃん)

おきがえリポちゃん ~ 花華メイドレス&華商人のたすき ~ (2024/12/24)|目覚めし冒険者の広場
今月の貸衣装。

花華メイドレス花華メイドレス
女性陣の花華メイドレスはこんな感じ。
和風でメイドって言うと、女中かな。

華商人のたすき
男性陣の華商人のたすきはこう。
こっちはカミハルムイで普通に商売してそう。

ふにゃ1


いろいろ頑張ろうとしたらコミットが中途半端な状態になったので今日は画像だけ。
詳しくは明日の日記にでも。

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

書き忘れてたんで追記。

来週、もとい、来年の放送情報。

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

ふにゃ1(開発状況)

まあ、普通にメニューで選択中のオプションとか、機能の解禁状況で表示切り替えたりとか、そういう基本的なところですな。

GitHub Copilotにコミットメッセージ任せたらステージセレクトの件がスルーされましたが、オプション変えたときの反応です。
秘密機能本体の実装も進んできたというわけです。

大昔のソフトだし公式ページに全シークレット書いてるのでネタバレ自重しないんですが、無重力に関するバグ修正です。
ここはちゃんとVB6のコードを解析できていたのですが、なぜか解析したコードを転記していませんでした。
無重力で飛び上がったら天井に頭ぶつけるか死ぬまで操作が効かないって状況になってしまっていました。

ここは実質動きの変わらない気分的な修正。

ショートカットキーの実装です。
これまでメニューイベントはClickイベントで実装していましたが、ショートカットキーの実装に当たって、WPFの流儀に従ってコマンドで実装しなおしました。
ショートカットキー本体とショートカットキーの表示が別管理になっているというのがちょっと微妙なところですが。

時々やっとかないと忘れる説明更新。

浮き沈みランチャー

課題「#32 削除前に尋ねる」の対応です。
一行で終わり!

ウィルス扱いされる件の再確認が済んだら、リリースしようかと思います。
それまでは、単純に自分一人で便利に使います。
一応、CIビルド版はGitHub Actionsからダウンロードできます。

ふにゃ1とドラゴンクエスト10

ふにゃ1(開発状況)

設定の保存名のReverseが機能解禁状況と設定値で同じになっていて、うまく読み書きできない状態だったので、解禁状況のほうを名前変更しました。
スピードのほうは最初から想定して「SpeedSet」にしてたのになァ。

VB版からのデータ引継ぎに対応しました!
ただ、今のところVB版とWPF版を共存できる環境がないので、テストはできていません。
また、最初にVB版のデータを引き継いだ後は、WPF版専用の場所に別形式で保存するので、VB版に設定を書き戻すことは想定していません。

ドラゴンクエスト10

魔法の迷宮ボスモンスター「人食い火竜」登場! (2024/12/23)|目覚めし冒険者の広場
新コインボス。
まだ戦ってないどころかコインすら当てていませんが、討伐報酬だけはクリスマスプレゼントでもらいました。
まあ、3キャラ合わせて福引券2万枚ぐらいはあるので、引いたらコインぐらいいくらか当たるでしょう。

ふにゃ1

設定&記録の読み書きができるようになりました!
これでバナナ収集要素も秘密機能も成立します。
もちろん、音楽とかの設定も、軌道のたびにやり直す必要はありません。
秘密機能由来のゲーム速度や重力などの設定も保存しますが、そのあたりは変数があるだけで中身は未実装。
あと、VB版とは記録場所が違うので、今のところ互換性はありません。
まあ、レジストリにいることはわかっているので、引継ぎ機能は作れると思いますが。

再生のたびにイベントをつけたり外したりしていたら、どこかで対応関係がずれるのか、ループがバグったりしたので、修正しました。

VB版にはなかった画面サイズ変更機能が付いたので、それへの対応。

VB版からの変更点追記。
コミットメッセージはAI任せにすることもありますし、今日のコミットにも使っていますが、これに関してはAIが大ウソついたので、手書きしました。

READMEに概要だけ書いたのを見て、ソースコードに実装したと勘違いするの、たぶん疑似相関に騙されてる感じですね。
疑似相関というのは、「体重の重い子供ほど学力が高い」みたいなやつで、本当は体重と学力に因果関係なんてないのに、年齢でどっちも上がっていくから、まるで因果関係があるような数値が出るんですね。
今回のでいうと、ソースコードに実装したら、文書にその概要を書き、コミットメッセージにも概要を書くわけです。
そうすると、ソースコード→文書、ソースコード→コミットメッセージの因果関係が生まれるわけですが、一つのコミットにまとめると、文書→コミットメッセージの因果関係もあるように見えるのです。
だから、論理的な判断ではなく、文字列の解釈だけで結果を出すようなAIは間違った結果を出すわけですね。

ドラゴンクエスト10とふにゃ1

ドラゴンクエスト10(全員)

  • クエスト「もうひとつの星夜祭」をクリアした!

クリスマスイベント「もうひとつの星夜祭」 (2024/12/4)|目覚めし冒険者の広場
ふにゃ1の移植で忙しいけど、そろそろ期限も近付いてきたのでやりましたよ。

闇のクリスマスツリー
クリスマスツリーがまがまがしくなっています。
でもこれはこれで好き。

帝国の闇サンタたち
メインストーリーのネタバレじゃないイベントボスなので隠さず写真載せるよ。
帝国三将軍のクリスマスバージョンです。
冬のイベントボスがたまに使う雪だるま攻撃、今回はふんだんに使ってきました。
あっちもこっちも雪だるま!

ボンボントップスセット
クリア報酬は装備品のボンボントップスセット。
足装備だけ、クリア後の収集要素として、タイツ(ハイソックス?)付きの靴もあります。
写真で穿いてるのがまさにそれ。
ここには直接載せないけど、このセットとは別に傘装備の羽をつけてもいい感じ。

スイートノエルチェア、スイートノエルテーブル、ガラスのツリー
イベントエリアで買える家具はこんな感じ。
机と椅子はファンシー系を目指すハウジングなら季節問わず使えそう。
ガラスのツリーは庭用もあります。

他の写真は以下から。
写真置き場「2024/12/23」

ふにゃ1

音楽の設定画面の調整。
デフォルトで音楽鳴らさないようにしておくと、ファイルだけ設定しても鳴らないので、ファイル設定だけでなるようにデフォルトでオンになるようにしておきました。
さらに、オフなのにファイルを設定して混乱しないように、オフの間はファイルを設定できないようにしました。
ちなみにこのコミットメッセージはAI製。

ループ機能も実装しました。
VB版ではコントロール自身がよしなにしてくれていたのですが、WPF版ではループ用のコードを書いています。
さらに、WPF版では、ループするかしないかの設定もできるので、音楽としてファンファーレみたいな短いのを設定しても違和感なく鳴らせます。
このコミットメッセージはAIが出したのがろくでもない内容だったので心のこもった手書きです。

ふにゃ1

今回は音楽中心なので画面写真なし。

画像が一部欠ける現象、Widthプロパティが(もちろんHeightプロパティも)DPI依存で、古いビットマップ画像のDPIがなぜか95.95とか96.01とか、ぴったり96じゃないのが原因でした。
そうはいっても、ピクセルデータを持っていないはずがないので、ピクセル関係のプロパティを調べたら、そのものずばりなPixelWidthがあったので、それを使うようにしました。

変更点追記だけ。
…だけなのに、GitHub Copilotにコミットメッセージ任せたらとんでもないこと言い出したので、結局ほとんどコミットメッセージ削りました。

秘密機能だけじゃなくてバナナ取った数とかも入れていたので、しっくりくる名前に変更しました。

今日の本命、音楽再生。
VB版ではWindowsMediaPlayerを埋め込んでいたので、それに倣ってWPF版ではMediaPlayerを使っています。
やろうと思えば動画も音源にできますよ。

これはまあ、いつかやらないといけない、内容を変えないリファクタリング。

<前 次>