インベントリ左にあるレンダリングされたキャラクタイメージを任意の指定した画像に差し替えるmod。ペーパードールをポートレートに差し替えると言うとなんだか懐かしい響き。
20年以上前の見栄えのしないレンダリングよりも、私の好きなクラシックRPGのポートレート方式の方が良いんじゃないかと思ってやってみた。
MWSEを使うと、メニュー内に画像を足すことは簡単にできるんだけれど、このキャラクターイメージの場合、内部的にレンダリング諸々の独自の処理が動き続けているので普通の画像操作とは挙動が異なり、自在に画像をレイアウトできるというわけにはいかない。そのブラックボックスの挙動を把握することが最初の難所だった。
チマチマと挙動を推測して実践してうまくいけそうだという手応えは掴めたんだけれど、自分だけが差し替えるんじゃなくてユーザが好きな画像を指定できるmodとしてリリースするには、それが容易にできるようなユーザフレンドリーなMod Configメニューを作るのが大変だろうという予想は浮かんでいた。
そして、予想通りメニュー作りが一番大変だった。
MWSEのMod Configメニューには、mcmというフレームワークが用意されていて、基本的にはそれで比較的容易にMod Configのメニュー画面を作成することが出来るんだけれど、今回はその基本的なことから外れていることをやるだろうという予想だ。
このmodのメニューでやることは、一般的なメニューの単純にフラグをオンオフして、スライダーで値を調整できるというものではなくて、画像を指定してロードできるようにして、エラーハンドリングも含めて正常動作するように対応して、インベントリ相当のプレビューを表示して、表示を調整するような各項目の変更にもプレビューをリアルタイムに追従させるという…要するに様々な項目が連動して動的に変化するメニューである。このような場合、mcmを使用することは(知っている限りでは)その構造上難しく、フレームワークではないローレベルなUIのAPIを使用して処理する必要がある。
それから、本来のキャラクターイメージには、マウスカーソルをあてるとその装備品のツールチップが表示されて、それをクリックすると装備を外すことができ、逆に装備品やアイテムを持っていくと装備や使用したりする機能がある。
前者はポートレートになることで見た目と機能が一致しなくなるので無効にしたいが(インベントリから同じことが出来るので不便ではない)、後者は出来なくなるのは困る。前者を無効にしようとしたときに、単純にマウスオーバーやクリックのイベント処理を停止させると、全く同じクリックを行う後者の装備やアイテムの使用も出来なくなる。データやイベントには、それらを区別するための違いがなくて困った。これはCommunityでそんなの分からんよという、ドキュメントになってないような情報を教えてもらって何とかなった。
余談であるが、この手のペーパードールやポートレートとステータス画面は、本来の電源無しのRole-Playing Gameのキャラクターシートがモチーフになっていると思うのだけれど、このmodを作るときに検索して見ていたところ、日本のキャラクターシートにはほとんど必ずと言っていいほどポートレート欄があるのだけれど、英語圏のCharacter Sheetにはポートレート欄が無いものが多い、ということに気が付いた。