日記(90)

<前 次>

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

ふにゃ1(開発状況)

ちゃんと公開するためには同梱用のステージも入れとかないとね。
ゼロGステージはもともとステージじゃないふりをしたファイルを同梱しておいて、条件達成時にリネームする仕組みでしたが、元ファイルを削除されてしまったり、リネーム済みのファイルを持ち越して別環境で新たに始めると問題を起こすようになっていたので、仕組みから変えました。
実行ファイルに元ファイルが埋め込まれるようにしたので、リネームではなく新たに生成されるようになります。

起動時にはもう既にゲームが始まっていて動き始めているのですが、プレイヤーの気分としては、タイトル画面の見た目なので、動いてないつもりなんですよ。
だから、プレイ中のBGMがのっけから流れ始めるとちょっとおかしな気分になるわけです。
ということで、キャラクターの動作がタイトルの時点で始まるという挙動は維持したまま、BGMは気分的な開始のタイミングに合わせました。

これも細かいけど、初期フォルダの調整。
ステージファイルがある場所ですな。

ステージメーカーに流用するためにCleaterからステージ関連以外を分離してたわけだけど、本当に流用しようとしたら、分離がまだ足りなかったので、ステージのデータ関連と、ステージを動かす部分を分離しました。
本来は、ステージを動かす部分がステージのデータ関連を持っているhasの関係なのですが、それをやるにはちょっと密結合すぎてしんどかったので、ステージを動かす部分がステージのデータ関連でもあるというisの関係として分離しました。
実装的には、メンバ変数として持つか、継承するかの違い。

ということで、ステージメーカーの本格的な実装を始めようとコードをいじくりまわしたけど、まともに動くほど進行はしてないです。

いつもの。

いくつか大きな改善点や新機能を用意したもので忘れかけてたけど、このプロジェクトの今の目的は、公開停止したVB版の代わりを早期に提供すること。
だからこそ、本来最適であろうゲームエンジンを使わず、愚直なWPFを使ったのです。
ステージメーカーのほうは再現にとどまらない大規模改変になりそうだし、ひとまずここはゲーム本体だけで公開したほうがいいかも。

ドラゴンクエスト10(ミフミン)

  • クエスト「新春とってもヘビーな鏡餅」をクリアした!

お正月イベント「新春とってもヘビ~な鏡餅!」 (2024/12/27更新)|目覚めし冒険者の広場
蛇姫からのヘルプ巳~|目覚めし冒険者の広場
この辺やってた。
思ったより時間かかったので写真とかは年越し写真と一緒に明日の日記にでも。

ふにゃ1(開発状況)


本体と同じ問題抱えていたステージメーカーも作り直し!

これは本体側の話。
結局単なるHTMLファイルにしました。
WindowsHelpはもちろん、HTMLヘルプ(CHM)も、今どきのWindowsには搭載されていないし、XAMLはUI作成用であって文書作成向けではないので不適任。
別にファイルを隠したいわけでもないので、1ファイルにまとめていない単なるHTMLファイル群にしたというわけです。

これ、拡大率100%、つまり普通の画面だと、ふにゃが嫌な感じにぼやけてしまうので、調整した形です。
同じ症状はプレイ記録画面のバナナにも表れますが、文字列幅がどうしても少数になってしまう都合上、こちらの解決は難しそうです。

で、このコミットがステージメーカー側。
これまでずっと別の実行ファイルとして提供してきましたが、もうゲーム本体に組み込むことにしました。
マップメーカーはもともと複数ウィンドウを使うものだったのですが、なんかそういう構成はだいぶ前から使われなくなっているので、1ウィンドウに全部収める構成に変更しています。
ツールバーのアイコンは一応自作です。

ふにゃ1(開発状況)

アセンブリ情報からバージョン情報を取るように変更。
こうしたほうがバージョンアップ時に必要な修正箇所が少なくて済むし、何よりこれがVB版の挙動だったんですよね。
VB版はソース紛失でバージョンアップできなくなり、あの実装の恩恵を受けることはありませんでしたが、今回はちゃんとバージョンアップできる体制ですからね。

あとはヘルプを作り直すだけかな。
WindowsHelpはもう使えないし、HTMLかな。
あるいは、WPFらしくXAMLかな?

ふにゃ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万枚ぐらいはあるので、引いたらコインぐらいいくらか当たるでしょう。

<前 次>